XbMachine

XbMachine

Functions

Types and Values

Description

Functions

XbMachineOpcodeFixupFunc ()

gboolean
(*XbMachineOpcodeFixupFunc) (XbMachine *self,
                             XbStack *opcodes,
                             gpointer user_data,
                             GError **error);

XbMachineTextHandlerFunc ()

gboolean
(*XbMachineTextHandlerFunc) (XbMachine *self,
                             XbStack *opcodes,
                             const gchar *text,
                             gboolean *handled,
                             gpointer user_data,
                             GError **error);

XbMachineMethodFunc ()

gboolean
(*XbMachineMethodFunc) (XbMachine *self,
                        XbStack *stack,
                        gboolean *result_unused,
                        gpointer exec_data,
                        gpointer user_data,
                        GError **error);

xb_machine_new ()

XbMachine *
xb_machine_new (void);

Creates a new virtual machine.

Returns

a new XbMachine

Since: 0.1.1


xb_machine_set_debug_flags ()

void
xb_machine_set_debug_flags (XbMachine *self,
                            XbMachineDebugFlags flags);

Sets the debug level of the virtual machine.

Parameters

Since: 0.1.1


xb_machine_parse ()

XbStack *
xb_machine_parse (XbMachine *self,
                  const gchar *text,
                  gssize text_len,
                  GError **error);

xb_machine_parse is deprecated and should not be used in newly-written code.

Parses an XPath predicate. Not all of XPath 1.0 or XPath 1.0 is supported, and new functions and mnemonics can be added using xb_machine_add_method() and xb_machine_add_text_handler().

Parameters

self

a XbMachine

 

text

predicate to parse, e.g. contains(text(),'xyx')

 

text_len

length of text , or -1 if text is NUL terminated

 

error

a GError, or NULL

 

Returns

opcodes, or NULL on error.

[transfer full]

Since: 0.1.1


xb_machine_parse_full ()

XbStack *
xb_machine_parse_full (XbMachine *self,
                       const gchar *text,
                       gssize text_len,
                       XbMachineParseFlags flags,
                       GError **error);

Parses an XPath predicate. Not all of XPath 1.0 or XPath 1.0 is supported, and new functions and mnemonics can be added using xb_machine_add_method() and xb_machine_add_text_handler().

Parameters

self

a XbMachine

 

text

predicate to parse, e.g. contains(text(),'xyx')

 

text_len

length of text , or -1 if text is NUL terminated

 

flags

XbMachineParseFlags, e.g. XB_MACHINE_PARSE_FLAG_OPTIMIZE

 

error

a GError, or NULL

 

Returns

opcodes, or NULL on error.

[transfer full]

Since: 0.1.4


xb_machine_run ()

gboolean
xb_machine_run (XbMachine *self,
                XbStack *opcodes,
                gboolean *result,
                gpointer exec_data,
                GError **error);

xb_machine_run has been deprecated since version 0.3.0 and should not be used in newly-written code.

Use xb_machine_run_with_bindings() instead.

Runs a set of opcodes on the virtual machine.

It is safe to call this function from a different thread to the one that created the XbMachine.

Parameters

self

a XbMachine

 

opcodes

a XbStack of opcodes

 

result

return status after running opcodes .

[out]

exec_data

per-run user data that is passed to all the XbMachineMethodFunc functions

 

error

a GError, or NULL

 

Returns

a new XbOpcode, or NULL

Since: 0.1.1


xb_machine_run_with_bindings ()

gboolean
xb_machine_run_with_bindings (XbMachine *self,
                              XbStack *opcodes,
                              XbValueBindings *bindings,
                              gboolean *result,
                              gpointer exec_data,
                              GError **error);

Runs a set of opcodes on the virtual machine, using the bound values given in bindings to substitute for bound opcodes.

It is safe to call this function from a different thread to the one that created the XbMachine.

Parameters

self

a XbMachine

 

opcodes

a XbStack of opcodes

 

bindings

values bound to opcodes of type XB_OPCODE_KIND_BOUND_INTEGER or XB_OPCODE_KIND_BOUND_TEXT, or NULL if the query doesn’t need any bound values.

[nullable][transfer none]

result

return status after running opcodes .

[out]

exec_data

per-run user data that is passed to all the XbMachineMethodFunc functions

 

error

a GError, or NULL

 

Returns

a new XbOpcode, or NULL

Since: 0.3.0


xb_machine_add_opcode_fixup ()

void
xb_machine_add_opcode_fixup (XbMachine *self,
                             const gchar *opcodes_sig,
                             XbMachineOpcodeFixupFunc fixup_cb,
                             gpointer user_data,
                             GDestroyNotify user_data_free);

Adds an opcode fixup. Fixups can be used to optimize the stack of opcodes or to add support for a nonstandard feature, for instance supporting missing attributes to functions.

Parameters

self

a XbMachine

 

opcodes_sig

signature, e.g. INTE,TEXT

 

fixup_cb

callback

 

user_data

user pointer to pass to fixup_cb

 

user_data_free

a function which gets called to free user_data , or NULL

 

Since: 0.1.1


xb_machine_add_text_handler ()

void
xb_machine_add_text_handler (XbMachine *self,
                             XbMachineTextHandlerFunc handler_cb,
                             gpointer user_data,
                             GDestroyNotify user_data_free);

Adds a text handler. This allows the virtual machine to support nonstandard encoding or shorthand mnemonics for standard functions.

Parameters

self

a XbMachine

 

handler_cb

callback

 

user_data

user pointer to pass to handler_cb

 

user_data_free

a function which gets called to free user_data , or NULL

 

Since: 0.1.1


xb_machine_add_method ()

void
xb_machine_add_method (XbMachine *self,
                       const gchar *name,
                       guint n_opcodes,
                       XbMachineMethodFunc method_cb,
                       gpointer user_data,
                       GDestroyNotify user_data_free);

Adds a new function to the virtual machine. Registered functions can then be used as methods.

The method_cb must not modify the stack it’s passed unless it’s going to succeed. In particular, if a method call is not optimisable, it must not modify the stack it’s passed.

You need to add a custom function using xb_machine_add_method() before using methods that may reference it, for example xb_machine_add_opcode_fixup().

Parameters

self

a XbMachine

 

name

function name, e.g. contains

 

n_opcodes

minimum number of opcodes required on the stack

 

method_cb

function to call

 

user_data

user pointer to pass to method_cb , or NULL

 

user_data_free

a function which gets called to free user_data , or NULL

 

Since: 0.1.1


xb_machine_add_operator ()

void
xb_machine_add_operator (XbMachine *self,
                         const gchar *str,
                         const gchar *name);

Adds a new operator to the virtual machine. Operators can then be used instead of explicit methods like eq().

You need to add a custom operator using xb_machine_add_operator() before using xb_machine_parse(). Common operators like <= and = are built-in and do not have to be added manually.

Parameters

self

a XbMachine

 

str

operator string, e.g. ==

 

name

function name, e.g. contains

 

Since: 0.1.1


xb_machine_opcode_func_init ()

gboolean
xb_machine_opcode_func_init (XbMachine *self,
                             XbOpcode *opcode,
                             const gchar *func_name);

Initialises a stack allocated XbOpcode for a registered function. Some standard functions are registered by default, for instance eq or ge. Other functions have to be added using xb_machine_add_method().

Parameters

self

a XbMachine

 

opcode

a stack allocated XbOpcode to initialise.

[out caller-allocates]

func_name

function name, e.g. eq

 

Returns

TRUE if the function was found and the opcode initialised, FALSE otherwise

Since: 0.2.0


xb_machine_stack_pop ()

gboolean
xb_machine_stack_pop (XbMachine *self,
                      XbStack *stack,
                      XbOpcode *opcode_out,
                      GError **error);

Pops an opcode from the stack.

Parameters

self

a XbMachine

 

stack

a XbStack

 

opcode_out

return location for the popped XbOpcode.

[out caller-allocates][optional]

error

a GError, or NULL

 

Returns

TRUE if popping succeeded, FALSE if the stack was empty already

Since: 0.2.0


xb_machine_stack_push ()

gboolean
xb_machine_stack_push (XbMachine *self,
                       XbStack *stack,
                       XbOpcode **opcode_out,
                       GError **error);

Pushes a new empty opcode onto the end of the stack. A pointer to the opcode is returned in opcode_out so that the caller can initialise it.

If the stack reaches its maximum size, G_IO_ERROR_NO_SPACE will be returned.

Parameters

self

a XbMachine

 

stack

a XbStack

 

opcode_out

return location for the new XbOpcode.

[out][nullable]

error

return location for a GError, or NULL

 

Returns

TRUE if a new empty opcode was returned, or FALSE if the stack has reached its maximum size

Since: 0.2.0


xb_machine_stack_push_text ()

gboolean
xb_machine_stack_push_text (XbMachine *self,
                            XbStack *stack,
                            const gchar *str,
                            GError **error);

Adds a text literal to the stack, copying str .

Errors are as for xb_machine_stack_push().

Parameters

self

a XbMachine

 

stack

a XbStack

 

str

text literal

 

error

return location for a GError, or NULL

 

Returns

TRUE on success, FALSE otherwise

Since: 0.2.0


xb_machine_stack_push_text_static ()

gboolean
xb_machine_stack_push_text_static (XbMachine *self,
                                   XbStack *stack,
                                   const gchar *str,
                                   GError **error);

Adds static text literal to the stack.

Errors are as for xb_machine_stack_push().

Parameters

self

a XbMachine

 

stack

a XbStack

 

str

text literal

 

error

return location for a GError, or NULL

 

Returns

TRUE on success, FALSE otherwise

Since: 0.2.0


xb_machine_stack_push_text_steal ()

gboolean
xb_machine_stack_push_text_steal (XbMachine *self,
                                  XbStack *stack,
                                  gchar *str,
                                  GError **error);

Adds a stolen text literal to the stack.

Errors are as for xb_machine_stack_push().

Parameters

self

a XbMachine

 

stack

a XbStack

 

str

text literal.

[transfer full]

error

return location for a GError, or NULL

 

Returns

TRUE on success, FALSE otherwise

Since: 0.2.0


xb_machine_stack_push_integer ()

gboolean
xb_machine_stack_push_integer (XbMachine *self,
                               XbStack *stack,
                               guint32 val,
                               GError **error);

Adds an integer literal to the stack.

Errors are as for xb_machine_stack_push().

Parameters

self

a XbMachine

 

stack

a XbStack

 

val

integer literal

 

error

return location for a GError, or NULL

 

Returns

TRUE on success, FALSE otherwise

Since: 0.2.0


xb_machine_set_stack_size ()

void
xb_machine_set_stack_size (XbMachine *self,
                           guint stack_size);

Sets the maximum stack size used for the machine.

The stack size will be affective for new jobs started with xb_machine_run() and xb_machine_parse().

Parameters

self

a XbMachine

 

stack_size

integer

 

Since: 0.1.3


xb_machine_get_stack_size ()

guint
xb_machine_get_stack_size (XbMachine *self);

Gets the maximum stack size used for the machine.

Parameters

self

a XbMachine

 

Returns

integer

Since: 0.1.3

Types and Values

XB_TYPE_MACHINE

#define             XB_TYPE_MACHINE

struct XbMachineClass

struct XbMachineClass {
	GObjectClass parent_class;
};

enum XbMachineDebugFlags

The flags to control the amount of debugging is generated.

Members

XB_MACHINE_DEBUG_FLAG_NONE

   

XB_MACHINE_DEBUG_FLAG_SHOW_STACK

   

XB_MACHINE_DEBUG_FLAG_SHOW_PARSING

   

XB_MACHINE_DEBUG_FLAG_SHOW_OPTIMIZER

   

XB_MACHINE_DEBUG_FLAG_SHOW_SLOW_PATH

   

enum XbMachineParseFlags

The flags to control the parsing behaviour.

Members

XB_MACHINE_PARSE_FLAG_NONE

   

XB_MACHINE_PARSE_FLAG_OPTIMIZE

   

XbMachine

typedef struct _XbMachine XbMachine;