<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GObject" version="2.0"/>
  <include name="Gio" version="2.0"/>
  <package name="libxmlb"/>
  <c:include name="xmlb.h"/>
  <namespace name="Xmlb"
             version="1.0"
             shared-library="libxmlb.so.1"
             c:identifier-prefixes="Xb"
             c:symbol-prefixes="xb">
    <class name="Builder"
           c:symbol-prefix="builder"
           c:type="XbBuilder"
           parent="GObject.Object"
           glib:type-name="XbBuilder"
           glib:get-type="xb_builder_get_type"
           glib:type-struct="BuilderClass">
      <constructor name="new" c:identifier="xb_builder_new" version="0.1.0">
        <doc xml:space="preserve">Creates a new builder.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbBuilder</doc>
          <type name="Builder" c:type="XbBuilder*"/>
        </return-value>
      </constructor>
      <method name="add_fixup"
              c:identifier="xb_builder_add_fixup"
              version="0.1.3">
        <doc xml:space="preserve">Adds a function that will get run on every #XbBuilderNode compile creates
for the silo. This is run after all the #XbBuilderSource fixups have been
run.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilder</doc>
            <type name="Builder" c:type="XbBuilder*"/>
          </instance-parameter>
          <parameter name="fixup" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderFixup</doc>
            <type name="BuilderFixup" c:type="XbBuilderFixup*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_locale"
              c:identifier="xb_builder_add_locale"
              version="0.1.0">
        <doc xml:space="preserve">Adds a locale to the builder. Locales added first will be prioritised over
locales added later.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Builder" c:type="XbBuilder*"/>
          </instance-parameter>
          <parameter name="locale" transfer-ownership="none">
            <doc xml:space="preserve">a locale, e.g. "en_US"</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="append_guid"
              c:identifier="xb_builder_append_guid"
              version="0.1.0">
        <doc xml:space="preserve">Adds the GUID to the internal correctness hash.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Builder" c:type="XbBuilder*"/>
          </instance-parameter>
          <parameter name="guid" transfer-ownership="none">
            <doc xml:space="preserve">any text, typcically a filename or GUID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="compile"
              c:identifier="xb_builder_compile"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Compiles a #XbSilo.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbSilo, or %NULL for error</doc>
          <type name="Silo" c:type="XbSilo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Builder" c:type="XbBuilder*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbBuilderCompileFlags, e.g. %XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT</doc>
            <type name="BuilderCompileFlags" c:type="XbBuilderCompileFlags"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GCancellable, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="ensure"
              c:identifier="xb_builder_ensure"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Ensures @file is up to date, and returns a compiled #XbSilo.

If @silo is being used by a query (e.g. in another thread) then all node
data is immediately invalid.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbSilo, or %NULL for error</doc>
          <type name="Silo" c:type="XbSilo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Builder" c:type="XbBuilder*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbBuilderCompileFlags, e.g. %XB_BUILDER_COMPILE_FLAG_IGNORE_INVALID</doc>
            <type name="BuilderCompileFlags" c:type="XbBuilderCompileFlags"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GCancellable, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="import_node"
              c:identifier="xb_builder_import_node"
              version="0.1.0">
        <doc xml:space="preserve">Adds a node tree to the builder.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Builder" c:type="XbBuilder*"/>
          </instance-parameter>
          <parameter name="bn" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="import_source"
              c:identifier="xb_builder_import_source"
              version="0.1.0">
        <doc xml:space="preserve">Adds a #XbBuilderSource to the #XbBuilder.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Builder" c:type="XbBuilder*"/>
          </instance-parameter>
          <parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_profile_flags"
              c:identifier="xb_builder_set_profile_flags"
              version="0.1.1">
        <doc xml:space="preserve">Enables or disables the collection of profiling data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilder</doc>
            <type name="Builder" c:type="XbBuilder*"/>
          </instance-parameter>
          <parameter name="profile_flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbSiloProfileFlags, e.g. %XB_SILO_PROFILE_FLAG_DEBUG</doc>
            <type name="SiloProfileFlags" c:type="XbSiloProfileFlags"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="BuilderClass"
            c:type="XbBuilderClass"
            glib:is-gtype-struct-for="Builder">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_xb_reserved1" introspectable="0">
        <callback name="_xb_reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved2" introspectable="0">
        <callback name="_xb_reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved3" introspectable="0">
        <callback name="_xb_reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved4" introspectable="0">
        <callback name="_xb_reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved5" introspectable="0">
        <callback name="_xb_reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved6" introspectable="0">
        <callback name="_xb_reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved7" introspectable="0">
        <callback name="_xb_reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <bitfield name="BuilderCompileFlags" c:type="XbBuilderCompileFlags">
      <doc xml:space="preserve">The flags for converting to XML.</doc>
      <member name="none"
              value="0"
              c:identifier="XB_BUILDER_COMPILE_FLAG_NONE">
        <doc xml:space="preserve">No extra flags to use</doc>
      </member>
      <member name="native_langs"
              value="2"
              c:identifier="XB_BUILDER_COMPILE_FLAG_NATIVE_LANGS">
        <doc xml:space="preserve">Only load native languages</doc>
      </member>
      <member name="ignore_invalid"
              value="4"
              c:identifier="XB_BUILDER_COMPILE_FLAG_IGNORE_INVALID">
        <doc xml:space="preserve">Ignore invalid files without an error</doc>
      </member>
      <member name="single_lang"
              value="8"
              c:identifier="XB_BUILDER_COMPILE_FLAG_SINGLE_LANG">
        <doc xml:space="preserve">Only store a single language</doc>
      </member>
      <member name="watch_blob"
              value="16"
              c:identifier="XB_BUILDER_COMPILE_FLAG_WATCH_BLOB">
        <doc xml:space="preserve">Watch the XMLB file for changes</doc>
      </member>
    </bitfield>
    <class name="BuilderFixup"
           c:symbol-prefix="builder_fixup"
           c:type="XbBuilderFixup"
           parent="GObject.Object"
           glib:type-name="XbBuilderFixup"
           glib:get-type="xb_builder_fixup_get_type"
           glib:type-struct="BuilderFixupClass">
      <constructor name="new"
                   c:identifier="xb_builder_fixup_new"
                   version="0.1.3">
        <doc xml:space="preserve">Creates a function that will get run on every #XbBuilderNode compile creates.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbBuilderFixup</doc>
          <type name="BuilderFixup" c:type="XbBuilderFixup*"/>
        </return-value>
        <parameters>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">a text ID value, e.g. `AppStreamUpgrade`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <doc xml:space="preserve">a callback</doc>
            <type name="BuilderFixupFunc" c:type="XbBuilderFixupFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user pointer to pass to @func, or %NULL</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_free"
                     transfer-ownership="none"
                     scope="async">
            <doc xml:space="preserve">a function which gets called to free @user_data, or %NULL</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_max_depth"
              c:identifier="xb_builder_fixup_get_max_depth"
              version="0.1.3">
        <doc xml:space="preserve">Gets the maximum depth used for this fixup, if each node is being visited.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">integer, or -1 if unset</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderFixup</doc>
            <type name="BuilderFixup" c:type="XbBuilderFixup*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_max_depth"
              c:identifier="xb_builder_fixup_set_max_depth"
              version="0.1.3">
        <doc xml:space="preserve">Sets the maximum depth used for this fixup. Use a @max_depth of 0 to only
visit the root node.

Setting a maximum depth may increase performance considerably if using
fixup functions on large and deeply nested XML files.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderFixup</doc>
            <type name="BuilderFixup" c:type="XbBuilderFixup*"/>
          </instance-parameter>
          <parameter name="max_depth" transfer-ownership="none">
            <doc xml:space="preserve">integer, -1 for "all"</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="BuilderFixupClass"
            c:type="XbBuilderFixupClass"
            glib:is-gtype-struct-for="BuilderFixup">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_xb_reserved1" introspectable="0">
        <callback name="_xb_reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved2" introspectable="0">
        <callback name="_xb_reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved3" introspectable="0">
        <callback name="_xb_reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved4" introspectable="0">
        <callback name="_xb_reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved5" introspectable="0">
        <callback name="_xb_reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved6" introspectable="0">
        <callback name="_xb_reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved7" introspectable="0">
        <callback name="_xb_reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <callback name="BuilderFixupFunc" c:type="XbBuilderFixupFunc" throws="1">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="self" transfer-ownership="none">
          <type name="BuilderFixup" c:type="XbBuilderFixup*"/>
        </parameter>
        <parameter name="bn" transfer-ownership="none">
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="BuilderNode"
           c:symbol-prefix="builder_node"
           c:type="XbBuilderNode"
           parent="GObject.Object"
           glib:type-name="XbBuilderNode"
           glib:get-type="xb_builder_node_get_type"
           glib:type-struct="BuilderNodeClass">
      <constructor name="new"
                   c:identifier="xb_builder_node_new"
                   version="0.1.0">
        <doc xml:space="preserve">Creates a new builder node.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbBuilderNode</doc>
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </return-value>
        <parameters>
          <parameter name="element" transfer-ownership="none">
            <doc xml:space="preserve">An element name, e.g. "component"</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="add_child"
              c:identifier="xb_builder_node_add_child"
              version="0.1.0">
        <doc xml:space="preserve">Adds a child builder node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">A XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="child" transfer-ownership="none">
            <doc xml:space="preserve">A XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_flag"
              c:identifier="xb_builder_node_add_flag"
              version="0.1.0">
        <doc xml:space="preserve">Adds a flag to the builder node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="flag" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNodeFlags</doc>
            <type name="BuilderNodeFlags" c:type="XbBuilderNodeFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="depth"
              c:identifier="xb_builder_node_depth"
              version="0.1.1">
        <doc xml:space="preserve">Gets the depth of the node tree, where 0 is the root node.</doc>
        <return-value transfer-ownership="none">
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="export"
              c:identifier="xb_builder_node_export"
              version="0.1.5"
              throws="1">
        <doc xml:space="preserve">Exports the node to XML.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">XML data, or %NULL for an error</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbNodeExportFlags, e.g. #XB_NODE_EXPORT_FLAG_NONE</doc>
            <type name="NodeExportFlags" c:type="XbNodeExportFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_attr"
              c:identifier="xb_builder_node_get_attr"
              version="0.1.0">
        <doc xml:space="preserve">Gets an attribute from the builder node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">string, or %NULL if unset</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">attribute name, e.g. `type`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_attr_as_uint"
              c:identifier="xb_builder_node_get_attr_as_uint"
              version="0.1.3">
        <doc xml:space="preserve">Gets an attribute from the builder node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">integer, or 0 if unset</doc>
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">attribute name, e.g. `priority`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_child"
              c:identifier="xb_builder_node_get_child"
              version="0.1.1">
        <doc xml:space="preserve">Finds a child builder node by the element name, and optionally text value.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbBuilderNode, or %NULL if not found</doc>
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="element" transfer-ownership="none">
            <doc xml:space="preserve">An element name, e.g. "url"</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="text"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">node text, e.g. "gimp.desktop"</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_children"
              c:identifier="xb_builder_node_get_children"
              version="0.1.0">
        <doc xml:space="preserve">Gets the children of the builder node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">children</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="BuilderNode"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_element"
              c:identifier="xb_builder_node_get_element"
              version="0.1.0">
        <doc xml:space="preserve">Gets the element from the builder node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">string, or %NULL if unset</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_parent"
              c:identifier="xb_builder_node_get_parent"
              version="0.1.1">
        <doc xml:space="preserve">Gets the parent node for the current node.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbBuilderNode, or %NULL no parent exists.</doc>
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_text"
              c:identifier="xb_builder_node_get_text"
              version="0.1.0">
        <doc xml:space="preserve">Gets the text from the builder node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">string, or %NULL if unset</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_text_as_uint"
              c:identifier="xb_builder_node_get_text_as_uint"
              version="0.1.3">
        <doc xml:space="preserve">Gets the text from the builder node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">integer, or 0 if unset</doc>
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_flag"
              c:identifier="xb_builder_node_has_flag"
              version="0.1.0">
        <doc xml:space="preserve">Checks a flag on the builder node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @flag is set</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="flag" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNodeFlags</doc>
            <type name="BuilderNodeFlags" c:type="XbBuilderNodeFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="insert"
              c:identifier="xb_builder_node_insert"
              version="0.1.0"
              introspectable="0">
        <doc xml:space="preserve">Creates a new builder node.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbBuilderNode</doc>
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="parent" transfer-ownership="none">
            <doc xml:space="preserve">A XbBuilderNode, or %NULL</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="element" transfer-ownership="none">
            <doc xml:space="preserve">An element name, e.g. "component"</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve">any attributes to add to the node, terminated by %NULL</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="insert_text"
              c:identifier="xb_builder_node_insert_text"
              version="0.1.0"
              introspectable="0">
        <doc xml:space="preserve">Creates a new builder node with optional node text.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="parent" transfer-ownership="none">
            <doc xml:space="preserve">A XbBuilderNode, or %NULL</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="element" transfer-ownership="none">
            <doc xml:space="preserve">An element name, e.g. "id"</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="text"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">node text, e.g. "gimp.desktop"</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="..." transfer-ownership="none">
            <doc xml:space="preserve">any attributes to add to the node, terminated by %NULL</doc>
            <varargs/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_attr"
              c:identifier="xb_builder_node_remove_attr"
              version="0.1.0">
        <doc xml:space="preserve">Removes an attribute from the builder node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">attribute name, e.g. `type`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_child"
              c:identifier="xb_builder_node_remove_child"
              version="0.1.1">
        <doc xml:space="preserve">Removes a child builder node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">A XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="child" transfer-ownership="none">
            <doc xml:space="preserve">A XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_attr"
              c:identifier="xb_builder_node_set_attr"
              version="0.1.0">
        <doc xml:space="preserve">Adds an attribute to the builder node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">attribute name, e.g. `type`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve">attribute value, e.g. `desktop`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_element"
              c:identifier="xb_builder_node_set_element"
              version="0.1.0">
        <doc xml:space="preserve">Sets the element name on the builder node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="element" transfer-ownership="none">
            <doc xml:space="preserve">a string element</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_text"
              c:identifier="xb_builder_node_set_text"
              version="0.1.0">
        <doc xml:space="preserve">Sets the text on the builder node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="text" transfer-ownership="none">
            <doc xml:space="preserve">a string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="text_len" transfer-ownership="none">
            <doc xml:space="preserve">length of @text, or -1 if @text is NUL terminated</doc>
            <type name="gssize" c:type="gssize"/>
          </parameter>
        </parameters>
      </method>
      <method name="sort_children"
              c:identifier="xb_builder_node_sort_children"
              version="0.1.3">
        <doc xml:space="preserve">Sorts the node children using a custom sort function.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve">a #XbBuilderNodeSortFunc</doc>
            <type name="BuilderNodeSortFunc" c:type="XbBuilderNodeSortFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user pointer to pass to @func, or %NULL</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="traverse"
              c:identifier="xb_builder_node_traverse"
              version="0.1.1">
        <doc xml:space="preserve">Traverses a tree starting from @self. It calls the given function for each
node visited.

The traversal can be halted at any point by returning TRUE from @func.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
          <parameter name="order" transfer-ownership="none">
            <doc xml:space="preserve">a #GTraverseType, e.g. %G_PRE_ORDER</doc>
            <type name="GLib.TraverseType" c:type="GTraverseType"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">a #GTraverseFlags, e.g. %G_TRAVERSE_ALL</doc>
            <type name="GLib.TraverseFlags" c:type="GTraverseFlags"/>
          </parameter>
          <parameter name="max_depth" transfer-ownership="none">
            <doc xml:space="preserve">the maximum depth of the traversal, or -1 for no limit</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="call"
                     closure="4">
            <doc xml:space="preserve">a #XbBuilderNodeTraverseFunc</doc>
            <type name="BuilderNodeTraverseFunc"
                  c:type="XbBuilderNodeTraverseFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user pointer to pass to @func, or %NULL</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="unlink"
              c:identifier="xb_builder_node_unlink"
              version="0.1.1">
        <doc xml:space="preserve">Unlinks a #XbBuilderNode from a tree, resulting in two separate trees.

This should not be used from the function called by xb_builder_node_traverse()
otherwise the entire tree will not be traversed.

Instead use xb_builder_node_add_flag(bn,XB_BUILDER_NODE_FLAG_IGNORE);</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="BuilderNodeClass"
            c:type="XbBuilderNodeClass"
            glib:is-gtype-struct-for="BuilderNode">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_xb_reserved1" introspectable="0">
        <callback name="_xb_reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved2" introspectable="0">
        <callback name="_xb_reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved3" introspectable="0">
        <callback name="_xb_reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved4" introspectable="0">
        <callback name="_xb_reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved5" introspectable="0">
        <callback name="_xb_reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved6" introspectable="0">
        <callback name="_xb_reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved7" introspectable="0">
        <callback name="_xb_reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <bitfield name="BuilderNodeFlags" c:type="XbBuilderNodeFlags">
      <doc xml:space="preserve">The flags used when building a node.</doc>
      <member name="none" value="0" c:identifier="XB_BUILDER_NODE_FLAG_NONE">
        <doc xml:space="preserve">No extra flags to use</doc>
      </member>
      <member name="ignore"
              value="1"
              c:identifier="XB_BUILDER_NODE_FLAG_IGNORE">
        <doc xml:space="preserve">Do not include this node in the silo</doc>
      </member>
      <member name="literal_text"
              value="2"
              c:identifier="XB_BUILDER_NODE_FLAG_LITERAL_TEXT">
        <doc xml:space="preserve">Assume the node CDATA is already valid</doc>
      </member>
    </bitfield>
    <callback name="BuilderNodeSortFunc" c:type="XbBuilderNodeSortFunc">
      <return-value transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="bn1" transfer-ownership="none">
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </parameter>
        <parameter name="bn2" transfer-ownership="none">
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="BuilderNodeTraverseFunc"
              c:type="XbBuilderNodeTraverseFunc">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="bn" transfer-ownership="none">
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="BuilderSource"
           c:symbol-prefix="builder_source"
           c:type="XbBuilderSource"
           parent="GObject.Object"
           glib:type-name="XbBuilderSource"
           glib:get-type="xb_builder_source_get_type"
           glib:type-struct="BuilderSourceClass">
      <constructor name="new"
                   c:identifier="xb_builder_source_new"
                   version="0.1.1">
        <doc xml:space="preserve">Creates a new builder source.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbBuilderSource</doc>
          <type name="BuilderSource" c:type="XbBuilderSource*"/>
        </return-value>
      </constructor>
      <method name="add_converter"
              c:identifier="xb_builder_source_add_converter"
              version="0.1.1"
              introspectable="0">
        <doc xml:space="preserve">Adds a function that can be used to convert files loaded with
xb_builder_source_load_xml().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </instance-parameter>
          <parameter name="content_types" transfer-ownership="none">
            <doc xml:space="preserve">mimetypes, e.g. `application/x-desktop,application/gzip`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <doc xml:space="preserve">a callback</doc>
            <type name="BuilderSourceConverterFunc"
                  c:type="XbBuilderSourceConverterFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user pointer to pass to @func, or %NULL</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_free"
                     transfer-ownership="none"
                     scope="async">
            <doc xml:space="preserve">a function which gets called to free @user_data, or %NULL</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_fixup"
              c:identifier="xb_builder_source_add_fixup"
              version="0.1.3">
        <doc xml:space="preserve">Adds a function that will get run on every #XbBuilderNode compile creates
with this source.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </instance-parameter>
          <parameter name="fixup" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderFixup</doc>
            <type name="BuilderFixup" c:type="XbBuilderFixup*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_node_func"
              c:identifier="xb_builder_source_add_node_func"
              version="0.1.0">
        <doc xml:space="preserve">Adds a function that will get run on every #XbBuilderNode compile creates.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </instance-parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">a text ID value, e.g. `AppStreamUpgrade`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <doc xml:space="preserve">a callback</doc>
            <type name="BuilderSourceNodeFunc"
                  c:type="XbBuilderSourceNodeFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user pointer to pass to @func, or %NULL</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_free"
                     transfer-ownership="none"
                     scope="async">
            <doc xml:space="preserve">a function which gets called to free @user_data, or %NULL</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_bytes"
              c:identifier="xb_builder_source_load_bytes"
              version="0.1.2"
              throws="1">
        <doc xml:space="preserve">Loads XML data and begins to build a #XbSilo.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE for success</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </instance-parameter>
          <parameter name="bytes" transfer-ownership="none">
            <doc xml:space="preserve">a #GBytes</doc>
            <type name="GLib.Bytes" c:type="GBytes*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbBuilderSourceFlags, e.g. %XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT</doc>
            <type name="BuilderSourceFlags" c:type="XbBuilderSourceFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_file"
              c:identifier="xb_builder_source_load_file"
              version="0.1.1"
              throws="1">
        <doc xml:space="preserve">Loads an optionally compressed XML file to build a #XbSilo.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE for success</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbBuilderSourceFlags, e.g. %XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT</doc>
            <type name="BuilderSourceFlags" c:type="XbBuilderSourceFlags"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GCancellable, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_xml"
              c:identifier="xb_builder_source_load_xml"
              version="0.1.1"
              throws="1">
        <doc xml:space="preserve">Loads XML data and begins to build a #XbSilo.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE for success</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </instance-parameter>
          <parameter name="xml" transfer-ownership="none">
            <doc xml:space="preserve">XML data</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbBuilderSourceFlags, e.g. %XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT</doc>
            <type name="BuilderSourceFlags" c:type="XbBuilderSourceFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_info"
              c:identifier="xb_builder_source_set_info"
              version="0.1.0">
        <doc xml:space="preserve">Sets an optional information metadata node on the root node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </instance-parameter>
          <parameter name="info"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #XbBuilderNode</doc>
            <type name="BuilderNode" c:type="XbBuilderNode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_prefix"
              c:identifier="xb_builder_source_set_prefix"
              version="0.1.0">
        <doc xml:space="preserve">Sets an optional prefix on the root node. This makes any nodes added
using this source reside under a common shared parent node.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbBuilderSource</doc>
            <type name="BuilderSource" c:type="XbBuilderSource*"/>
          </instance-parameter>
          <parameter name="prefix"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">an XPath prefix, e.g. `installed`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="BuilderSourceClass"
            c:type="XbBuilderSourceClass"
            glib:is-gtype-struct-for="BuilderSource">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_xb_reserved1" introspectable="0">
        <callback name="_xb_reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved2" introspectable="0">
        <callback name="_xb_reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved3" introspectable="0">
        <callback name="_xb_reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved4" introspectable="0">
        <callback name="_xb_reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved5" introspectable="0">
        <callback name="_xb_reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved6" introspectable="0">
        <callback name="_xb_reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved7" introspectable="0">
        <callback name="_xb_reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <callback name="BuilderSourceConverterFunc"
              c:type="XbBuilderSourceConverterFunc"
              introspectable="0"
              throws="1">
      <return-value>
        <type name="Gio.InputStream" c:type="GInputStream*"/>
      </return-value>
      <parameters>
        <parameter name="self" transfer-ownership="none">
          <type name="BuilderSource" c:type="XbBuilderSource*"/>
        </parameter>
        <parameter name="file" transfer-ownership="none">
          <type name="Gio.File" c:type="GFile*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="cancellable"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="BuilderSourceFlags" c:type="XbBuilderSourceFlags">
      <doc xml:space="preserve">The flags for converting to XML.</doc>
      <member name="none" value="0" c:identifier="XB_BUILDER_SOURCE_FLAG_NONE">
        <doc xml:space="preserve">No extra flags to use</doc>
      </member>
      <member name="literal_text"
              value="1"
              c:identifier="XB_BUILDER_SOURCE_FLAG_LITERAL_TEXT">
        <doc xml:space="preserve">Do not attempt to repair XML whitespace</doc>
      </member>
      <member name="watch_file"
              value="2"
              c:identifier="XB_BUILDER_SOURCE_FLAG_WATCH_FILE">
        <doc xml:space="preserve">Watch the source file for changes</doc>
      </member>
    </bitfield>
    <callback name="BuilderSourceNodeFunc"
              c:type="XbBuilderSourceNodeFunc"
              throws="1">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="self" transfer-ownership="none">
          <type name="BuilderSource" c:type="XbBuilderSource*"/>
        </parameter>
        <parameter name="bn" transfer-ownership="none">
          <type name="BuilderNode" c:type="XbBuilderNode*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="Machine"
           c:symbol-prefix="machine"
           c:type="XbMachine"
           parent="GObject.Object"
           glib:type-name="XbMachine"
           glib:get-type="xb_machine_get_type"
           glib:type-struct="MachineClass">
      <constructor name="new" c:identifier="xb_machine_new" version="0.1.1">
        <doc xml:space="preserve">Creates a new virtual machine.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbMachine</doc>
          <type name="Machine" c:type="XbMachine*"/>
        </return-value>
      </constructor>
      <method name="add_method"
              c:identifier="xb_machine_add_method"
              version="0.1.1">
        <doc xml:space="preserve">Adds a new function to the virtual machine. Registered functions can then be
used as methods.

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().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">function name, e.g. `contains`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="n_opcodes" transfer-ownership="none">
            <doc xml:space="preserve">minimum number of opcodes requried on the stack</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="method_cb"
                     transfer-ownership="none"
                     scope="notified"
                     closure="3"
                     destroy="4">
            <doc xml:space="preserve">function to call</doc>
            <type name="MachineMethodFunc" c:type="XbMachineMethodFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user pointer to pass to @method_cb, or %NULL</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_free"
                     transfer-ownership="none"
                     scope="async">
            <doc xml:space="preserve">a function which gets called to free @user_data, or %NULL</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_opcode_fixup"
              c:identifier="xb_machine_add_opcode_fixup"
              version="0.1.1">
        <doc xml:space="preserve">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.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="opcodes_sig" transfer-ownership="none">
            <doc xml:space="preserve">signature, e.g. `INTE,TEXT`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="fixup_cb"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <doc xml:space="preserve">callback</doc>
            <type name="MachineOpcodeFixupFunc"
                  c:type="XbMachineOpcodeFixupFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user pointer to pass to @fixup_cb</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_free"
                     transfer-ownership="none"
                     scope="async">
            <doc xml:space="preserve">a function which gets called to free @user_data, or %NULL</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_operator"
              c:identifier="xb_machine_add_operator"
              version="0.1.1">
        <doc xml:space="preserve">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 `&lt;=` and `=` are built-in
and do not have to be added manually.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">operator string, e.g. `==`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">function name, e.g. `contains`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_text_handler"
              c:identifier="xb_machine_add_text_handler"
              version="0.1.1">
        <doc xml:space="preserve">Adds a text handler. This allows the virtual machine to support nonstandard
encoding or shorthand mnemonics for standard functions.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="handler_cb"
                     transfer-ownership="none"
                     scope="notified"
                     closure="1"
                     destroy="2">
            <doc xml:space="preserve">callback</doc>
            <type name="MachineTextHandlerFunc"
                  c:type="XbMachineTextHandlerFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">user pointer to pass to @handler_cb</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_free"
                     transfer-ownership="none"
                     scope="async">
            <doc xml:space="preserve">a function which gets called to free @user_data, or %NULL</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_stack_size"
              c:identifier="xb_machine_get_stack_size"
              version="0.1.3">
        <doc xml:space="preserve">Gets the maximum stack size used for the machine.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">integer</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="opcode_func_new"
              c:identifier="xb_machine_opcode_func_new"
              version="0.1.1">
        <doc xml:space="preserve">Creates a new opcode for a registered function. Some standard opcodes are
registered by default, for instance `eq` or `ge`. Other opcodes have to be
added using xb_machine_add_method().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbOpcode, or %NULL</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="func_name" transfer-ownership="none">
            <doc xml:space="preserve">function name, e.g. `eq`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="opcode_to_string"
              c:identifier="xb_machine_opcode_to_string"
              version="0.1.1">
        <doc xml:space="preserve">Returns a string representing the specific opcode.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">text</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="opcode" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="opcodes_to_string"
              c:identifier="xb_machine_opcodes_to_string"
              version="0.1.1">
        <doc xml:space="preserve">Returns a string representing a set of opcodes.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">text</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="opcodes" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack of opcodes</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse"
              c:identifier="xb_machine_parse"
              version="0.1.1"
              throws="1">
        <doc xml:space="preserve">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().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">opcodes, or %NULL on error</doc>
          <type name="Stack" c:type="XbStack*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="text" transfer-ownership="none">
            <doc xml:space="preserve">predicate to parse, e.g. `contains(text(),'xyx')`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="text_len" transfer-ownership="none">
            <doc xml:space="preserve">length of @text, or -1 if @text is `NUL` terminated</doc>
            <type name="gssize" c:type="gssize"/>
          </parameter>
        </parameters>
      </method>
      <method name="parse_full"
              c:identifier="xb_machine_parse_full"
              version="0.1.4"
              throws="1">
        <doc xml:space="preserve">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().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">opcodes, or %NULL on error</doc>
          <type name="Stack" c:type="XbStack*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="text" transfer-ownership="none">
            <doc xml:space="preserve">predicate to parse, e.g. `contains(text(),'xyx')`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="text_len" transfer-ownership="none">
            <doc xml:space="preserve">length of @text, or -1 if @text is `NUL` terminated</doc>
            <type name="gssize" c:type="gssize"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">#XbMachineParseFlags, e.g. %XB_MACHINE_PARSE_FLAG_OPTIMIZE</doc>
            <type name="MachineParseFlags" c:type="XbMachineParseFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="run"
              c:identifier="xb_machine_run"
              version="0.1.1"
              throws="1">
        <doc xml:space="preserve">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.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a new #XbOpcode, or %NULL</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="opcodes" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack of opcodes</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
          <parameter name="result"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve">return status after running @opcodes</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="exec_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">per-run user data that is passed to all the XbMachineMethodFunc functions</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_debug_flags"
              c:identifier="xb_machine_set_debug_flags"
              version="0.1.1">
        <doc xml:space="preserve">Sets the debug level of the virtual machine.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">#XbMachineDebugFlags, e.g. %XB_MACHINE_DEBUG_FLAG_SHOW_STACK</doc>
            <type name="MachineDebugFlags" c:type="XbMachineDebugFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_stack_size"
              c:identifier="xb_machine_set_stack_size"
              version="0.1.3">
        <doc xml:space="preserve">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().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="stack_size" transfer-ownership="none">
            <doc xml:space="preserve">interger</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="stack_pop"
              c:identifier="xb_machine_stack_pop"
              version="0.1.1">
        <doc xml:space="preserve">Pops an opcode from the stack.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbOpcode, or %NULL</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="stack" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
        </parameters>
      </method>
      <method name="stack_push"
              c:identifier="xb_machine_stack_push"
              version="0.1.1">
        <doc xml:space="preserve">Adds an opcode to the stack.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="stack" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
          <parameter name="opcode" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="stack_push_integer"
              c:identifier="xb_machine_stack_push_integer"
              version="0.1.1">
        <doc xml:space="preserve">Adds an integer literal to the stack.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="stack" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
          <parameter name="val" transfer-ownership="none">
            <doc xml:space="preserve">interger literal</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="stack_push_steal"
              c:identifier="xb_machine_stack_push_steal"
              version="0.1.4">
        <doc xml:space="preserve">Adds an stolen opcode to the stack.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="stack" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
          <parameter name="opcode" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="stack_push_text"
              c:identifier="xb_machine_stack_push_text"
              version="0.1.1">
        <doc xml:space="preserve">Adds a text literal to the stack, copying @str.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="stack" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">text literal</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="stack_push_text_static"
              c:identifier="xb_machine_stack_push_text_static"
              version="0.1.1">
        <doc xml:space="preserve">Adds static text literal to the stack.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="stack" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">text literal</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="stack_push_text_steal"
              c:identifier="xb_machine_stack_push_text_steal"
              version="0.1.1">
        <doc xml:space="preserve">Adds a stolen text literal to the stack.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbMachine</doc>
            <type name="Machine" c:type="XbMachine*"/>
          </instance-parameter>
          <parameter name="stack" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </parameter>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">text literal</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="MachineClass"
            c:type="XbMachineClass"
            glib:is-gtype-struct-for="Machine">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_xb_reserved1" introspectable="0">
        <callback name="_xb_reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved2" introspectable="0">
        <callback name="_xb_reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved3" introspectable="0">
        <callback name="_xb_reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved4" introspectable="0">
        <callback name="_xb_reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved5" introspectable="0">
        <callback name="_xb_reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved6" introspectable="0">
        <callback name="_xb_reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved7" introspectable="0">
        <callback name="_xb_reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <bitfield name="MachineDebugFlags" c:type="XbMachineDebugFlags">
      <doc xml:space="preserve">The flags to control the amount of debugging is generated.</doc>
      <member name="none" value="0" c:identifier="XB_MACHINE_DEBUG_FLAG_NONE">
        <doc xml:space="preserve">No debug flags to use</doc>
      </member>
      <member name="show_stack"
              value="1"
              c:identifier="XB_MACHINE_DEBUG_FLAG_SHOW_STACK">
        <doc xml:space="preserve">Show the stack addition and removal</doc>
      </member>
      <member name="show_parsing"
              value="2"
              c:identifier="XB_MACHINE_DEBUG_FLAG_SHOW_PARSING">
        <doc xml:space="preserve">Show the XPath predicate parsing</doc>
      </member>
      <member name="show_optimizer"
              value="4"
              c:identifier="XB_MACHINE_DEBUG_FLAG_SHOW_OPTIMIZER">
        <doc xml:space="preserve">Show the optimizer operation</doc>
      </member>
    </bitfield>
    <callback name="MachineMethodFunc" c:type="XbMachineMethodFunc" throws="1">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="self" transfer-ownership="none">
          <type name="Machine" c:type="XbMachine*"/>
        </parameter>
        <parameter name="stack" transfer-ownership="none">
          <type name="Stack" c:type="XbStack*"/>
        </parameter>
        <parameter name="result" transfer-ownership="none">
          <type name="gboolean" c:type="gboolean*"/>
        </parameter>
        <parameter name="exec_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="MachineOpcodeFixupFunc"
              c:type="XbMachineOpcodeFixupFunc"
              throws="1">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="self" transfer-ownership="none">
          <type name="Machine" c:type="XbMachine*"/>
        </parameter>
        <parameter name="opcodes" transfer-ownership="none">
          <type name="Stack" c:type="XbStack*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <bitfield name="MachineParseFlags" c:type="XbMachineParseFlags">
      <doc xml:space="preserve">The flags to control the parsing behaviour.</doc>
      <member name="none" value="0" c:identifier="XB_MACHINE_PARSE_FLAG_NONE">
        <doc xml:space="preserve">No flags set</doc>
      </member>
      <member name="optimize"
              value="1"
              c:identifier="XB_MACHINE_PARSE_FLAG_OPTIMIZE">
        <doc xml:space="preserve">Run an optimization pass on the predicate</doc>
      </member>
    </bitfield>
    <callback name="MachineTextHandlerFunc"
              c:type="XbMachineTextHandlerFunc"
              throws="1">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="self" transfer-ownership="none">
          <type name="Machine" c:type="XbMachine*"/>
        </parameter>
        <parameter name="opcodes" transfer-ownership="none">
          <type name="Stack" c:type="XbStack*"/>
        </parameter>
        <parameter name="text" transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="handled" transfer-ownership="none">
          <type name="gboolean" c:type="gboolean*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="Node"
           c:symbol-prefix="node"
           c:type="XbNode"
           parent="GObject.Object"
           glib:type-name="XbNode"
           glib:get-type="xb_node_get_type"
           glib:type-struct="NodeClass">
      <method name="export"
              c:identifier="xb_node_export"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Exports the node back to XML.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">XML data, or %NULL for an error</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbNodeExportFlags, e.g. #XB_NODE_EXPORT_FLAG_NONE</doc>
            <type name="NodeExportFlags" c:type="XbNodeExportFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_attr" c:identifier="xb_node_get_attr" version="0.1.0">
        <doc xml:space="preserve">Gets some attribute text data for a specific node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string, or %NULL for unset</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">an attribute name, e.g. "type"</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_attr_as_uint"
              c:identifier="xb_node_get_attr_as_uint"
              version="0.1.0">
        <doc xml:space="preserve">Gets some attribute text data for a specific node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a guint64, or %G_MAXUINT64 if unfound</doc>
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">an attribute name, e.g. `type`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_child"
              c:identifier="xb_node_get_child"
              version="0.1.0">
        <doc xml:space="preserve">Gets the first child node for the current node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #XbNode, or %NULL</doc>
          <type name="Node" c:type="XbNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_children"
              c:identifier="xb_node_get_children"
              version="0.1.0">
        <doc xml:space="preserve">Gets all the children for the current node.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">an array of children</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="Node"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_data" c:identifier="xb_node_get_data" version="0.1.0">
        <doc xml:space="preserve">Gets any data that has been set on the node using xb_node_set_data().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #GBytes, or %NULL if not found</doc>
          <type name="GLib.Bytes" c:type="GBytes*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a string key, e.g. `fwupd::RemoteId`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_depth"
              c:identifier="xb_node_get_depth"
              version="0.1.0">
        <doc xml:space="preserve">Gets the depth of the node to a root.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a integer, where 0 is the root node iself.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_element"
              c:identifier="xb_node_get_element"
              version="0.1.0">
        <doc xml:space="preserve">Gets the element name for a specific node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string, or %NULL for unset</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_next" c:identifier="xb_node_get_next" version="0.1.0">
        <doc xml:space="preserve">Gets the next sibling node for the current node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #XbNode, or %NULL</doc>
          <type name="Node" c:type="XbNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_parent"
              c:identifier="xb_node_get_parent"
              version="0.1.0">
        <doc xml:space="preserve">Gets the parent node for the current node.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbNode, or %NULL</doc>
          <type name="Node" c:type="XbNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_root" c:identifier="xb_node_get_root" version="0.1.0">
        <doc xml:space="preserve">Gets the root node for the node.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbNode, or %NULL</doc>
          <type name="Node" c:type="XbNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_text" c:identifier="xb_node_get_text" version="0.1.0">
        <doc xml:space="preserve">Gets the text data for a specific node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string, or %NULL for unset</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_text_as_uint"
              c:identifier="xb_node_get_text_as_uint"
              version="0.1.0">
        <doc xml:space="preserve">Gets some attribute text data for a specific node.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a guint64, or %G_MAXUINT64 if unfound</doc>
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="query"
              c:identifier="xb_node_query"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the silo using an XPath query, returning up to @limit results.

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

Please note: Only a subset of XPath is supported.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">results, or %NULL if unfound</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="Node"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">an XPath, e.g. `id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="limit" transfer-ownership="none">
            <doc xml:space="preserve">maximum number of results to return, or 0 for "all"</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_attr"
              c:identifier="xb_node_query_attr"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the node using an XPath query, returning up to one result.

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

Please note: Only a subset of XPath is supported.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string, or %NULL if unfound</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">An XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">an attribute name, e.g. `type`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_attr_as_uint"
              c:identifier="xb_node_query_attr_as_uint"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the node using an XPath query, returning up to one result.

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

Please note: Only a subset of XPath is supported.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a guint64, or %G_MAXUINT64 if unfound</doc>
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">An XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve">an attribute name, e.g. `type`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_export"
              c:identifier="xb_node_query_export"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the node using an XPath query, returning an XML string of the
result and any children.

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

Please note: Only a subset of XPath is supported.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string, or %NULL if unfound</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">An XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_first"
              c:identifier="xb_node_query_first"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the node using an XPath query, returning up to one result.

Please note: Only a tiny subset of XPath 1.0 is supported.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbNode, or %NULL if unfound</doc>
          <type name="Node" c:type="XbNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">An XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_full"
              c:identifier="xb_node_query_full"
              version="0.1.4"
              throws="1">
        <doc xml:space="preserve">Searches the silo using an prepared query.

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

Please note: Only a subset of XPath is supported.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">results, or %NULL if unfound</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="Node"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve">an #XbQuery</doc>
            <type name="Query" c:type="XbQuery*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_text"
              c:identifier="xb_node_query_text"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the node using an XPath query, returning up to one result.

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

Please note: Only a subset of XPath is supported.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string, or %NULL if unfound</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">An XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_text_as_uint"
              c:identifier="xb_node_query_text_as_uint"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the node using an XPath query, returning up to one result.

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

Please note: Only a subset of XPath is supported.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a guint64, or %G_MAXUINT64 if unfound</doc>
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">An XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_data" c:identifier="xb_node_set_data" version="0.1.0">
        <doc xml:space="preserve">Sets some data on the node which can be retrieved using xb_node_get_data().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbNode</doc>
            <type name="Node" c:type="XbNode*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve">a string key, e.g. `fwupd::RemoteId`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">a #GBytes</doc>
            <type name="GLib.Bytes" c:type="GBytes*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="NodeClass"
            c:type="XbNodeClass"
            glib:is-gtype-struct-for="Node">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_xb_reserved1" introspectable="0">
        <callback name="_xb_reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved2" introspectable="0">
        <callback name="_xb_reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved3" introspectable="0">
        <callback name="_xb_reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved4" introspectable="0">
        <callback name="_xb_reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved5" introspectable="0">
        <callback name="_xb_reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved6" introspectable="0">
        <callback name="_xb_reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved7" introspectable="0">
        <callback name="_xb_reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <bitfield name="NodeExportFlags" c:type="XbNodeExportFlags">
      <doc xml:space="preserve">The flags for converting to XML.</doc>
      <member name="none" value="0" c:identifier="XB_NODE_EXPORT_FLAG_NONE">
        <doc xml:space="preserve">No extra flags to use</doc>
      </member>
      <member name="add_header"
              value="1"
              c:identifier="XB_NODE_EXPORT_FLAG_ADD_HEADER">
        <doc xml:space="preserve">Add an XML header to the data</doc>
      </member>
      <member name="format_multiline"
              value="2"
              c:identifier="XB_NODE_EXPORT_FLAG_FORMAT_MULTILINE">
        <doc xml:space="preserve">Split up children with a newline</doc>
      </member>
      <member name="format_indent"
              value="4"
              c:identifier="XB_NODE_EXPORT_FLAG_FORMAT_INDENT">
        <doc xml:space="preserve">Indent the XML by child depth</doc>
      </member>
      <member name="include_siblings"
              value="8"
              c:identifier="XB_NODE_EXPORT_FLAG_INCLUDE_SIBLINGS">
        <doc xml:space="preserve">Include the siblings when converting</doc>
      </member>
      <member name="only_children"
              value="16"
              c:identifier="XB_NODE_EXPORT_FLAG_ONLY_CHILDREN">
        <doc xml:space="preserve">Only export the children of the node</doc>
      </member>
    </bitfield>
    <record name="Opcode"
            c:type="XbOpcode"
            glib:type-name="XbOpcode"
            glib:get-type="xb_opcode_get_type"
            c:symbol-prefix="opcode">
      <constructor name="func_new"
                   c:identifier="xb_opcode_func_new"
                   version="0.1.1">
        <doc xml:space="preserve">Creates an opcode for a specific function. Custom functions can be registered
using xb_machine_add_func() and retrieved using xb_machine_opcode_func_new().</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbOpcode</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <parameter name="func" transfer-ownership="none">
            <doc xml:space="preserve">a function index</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="integer_new"
                   c:identifier="xb_opcode_integer_new"
                   version="0.1.1">
        <doc xml:space="preserve">Creates an opcode with an literal integer.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbOpcode</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <parameter name="val" transfer-ownership="none">
            <doc xml:space="preserve">a integer value</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="text_new"
                   c:identifier="xb_opcode_text_new"
                   version="0.1.1">
        <doc xml:space="preserve">Creates a new text literal opcode. The @str argument is copied internally
and is not tied to the lifecycle of the #XbOpcode.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbOpcode</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">a string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="text_new_static"
                   c:identifier="xb_opcode_text_new_static"
                   version="0.1.1">
        <doc xml:space="preserve">Creates a new text literal opcode, where @str is either static text or will
outlive the #XbOpcode lifecycle.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbOpcode</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">a string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="text_new_steal"
                   c:identifier="xb_opcode_text_new_steal"
                   version="0.1.1">
        <doc xml:space="preserve">Creates a new text literal opcode, stealing the @str. Once the opcode is
finalized g_free() will be called on @str.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbOpcode</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">a string</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="cmp_str" c:identifier="xb_opcode_cmp_str" version="0.1.1">
        <doc xml:space="preserve">Checks if the opcode can be compared using the string value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">#%TRUE if this opcode can be compared as an string</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="cmp_val" c:identifier="xb_opcode_cmp_val" version="0.1.1">
        <doc xml:space="preserve">Checks if the opcode can be compared using the integer value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">#%TRUE if this opcode can be compared as an integer</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_kind"
              c:identifier="xb_opcode_get_kind"
              version="0.1.1">
        <doc xml:space="preserve">Gets the opcode kind.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #XbOpcodeKind, e.g. %XB_OPCODE_KIND_INTEGER</doc>
          <type name="OpcodeKind" c:type="XbOpcodeKind"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_str" c:identifier="xb_opcode_get_str" version="0.1.1">
        <doc xml:space="preserve">Gets the string value stored on the opcode.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string, or %NULL if unset</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_val" c:identifier="xb_opcode_get_val" version="0.1.1">
        <doc xml:space="preserve">Gets the integer value stored in the opcode. This may be a function ID,
a index into the string table or a literal integer.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">value, or 0 for unset.</doc>
          <type name="guint32" c:type="guint32"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref" c:identifier="xb_opcode_ref" version="0.1.1">
        <doc xml:space="preserve">Increments the refcount of the opcode.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the original @self #XbOpcode instance</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="to_string"
              c:identifier="xb_opcode_to_string"
              version="0.1.4">
        <doc xml:space="preserve">Returns a string representing the specific opcode.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">text</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unref" c:identifier="xb_opcode_unref" version="0.1.1">
        <doc xml:space="preserve">Decrements the reference count of the opcode, freeing the object when the
refcount drops to zero.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </instance-parameter>
        </parameters>
      </method>
      <function name="kind_from_string"
                c:identifier="xb_opcode_kind_from_string"
                version="0.1.1">
        <doc xml:space="preserve">Converts a string to an opcode kind.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #XbOpcodeKind, e.g. %XB_OPCODE_KIND_TEXT</doc>
          <type name="OpcodeKind" c:type="XbOpcodeKind"/>
        </return-value>
        <parameters>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">a string, e.g. `FUNC`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="kind_to_string"
                c:identifier="xb_opcode_kind_to_string"
                version="0.1.1">
        <doc xml:space="preserve">Converts the opcode kind to a string.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">opcode kind, e.g. `FUNC`</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <parameter name="kind" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcodeKind, e.g. %XB_OPCODE_KIND_FUNCTION</doc>
            <type name="OpcodeKind" c:type="XbOpcodeKind"/>
          </parameter>
        </parameters>
      </function>
    </record>
    <bitfield name="OpcodeFlags" c:type="XbOpcodeFlags">
      <doc xml:space="preserve">The opcode flags. The values have been carefully chosen so that a simple
bitmask can be done to know how to compare for equality.

function─┐ ┌─string
bound──┐ │ │ ┌──integer
       │ │ │ │
 X X X X X X X
       8 4 2 1</doc>
      <member name="unknown" value="0" c:identifier="XB_OPCODE_FLAG_UNKNOWN">
      </member>
      <member name="integer" value="1" c:identifier="XB_OPCODE_FLAG_INTEGER">
        <doc xml:space="preserve">Integer value set</doc>
      </member>
      <member name="text" value="2" c:identifier="XB_OPCODE_FLAG_TEXT">
        <doc xml:space="preserve">Text value set</doc>
      </member>
      <member name="function" value="4" c:identifier="XB_OPCODE_FLAG_FUNCTION">
        <doc xml:space="preserve">An operator</doc>
      </member>
      <member name="bound" value="8" c:identifier="XB_OPCODE_FLAG_BOUND">
        <doc xml:space="preserve">A bound value, assigned later</doc>
      </member>
    </bitfield>
    <enumeration name="OpcodeKind" c:type="XbOpcodeKind">
      <member name="unknown" value="0" c:identifier="XB_OPCODE_KIND_UNKNOWN">
        <doc xml:space="preserve">Unknown opcode</doc>
      </member>
      <member name="integer" value="1" c:identifier="XB_OPCODE_KIND_INTEGER">
        <doc xml:space="preserve">A literal integer value</doc>
      </member>
      <member name="text" value="2" c:identifier="XB_OPCODE_KIND_TEXT">
        <doc xml:space="preserve">A literal text value</doc>
      </member>
      <member name="function" value="5" c:identifier="XB_OPCODE_KIND_FUNCTION">
        <doc xml:space="preserve">An operator</doc>
      </member>
      <member name="bound_unset"
              value="8"
              c:identifier="XB_OPCODE_KIND_BOUND_UNSET">
      </member>
      <member name="bound_integer"
              value="9"
              c:identifier="XB_OPCODE_KIND_BOUND_INTEGER">
        <doc xml:space="preserve">A bound integer value</doc>
      </member>
      <member name="bound_text"
              value="10"
              c:identifier="XB_OPCODE_KIND_BOUND_TEXT">
        <doc xml:space="preserve">A bound text value</doc>
      </member>
      <member name="indexed_text"
              value="3"
              c:identifier="XB_OPCODE_KIND_INDEXED_TEXT">
        <doc xml:space="preserve">An indexed text value</doc>
      </member>
    </enumeration>
    <class name="Query"
           c:symbol-prefix="query"
           c:type="XbQuery"
           parent="GObject.Object"
           glib:type-name="XbQuery"
           glib:get-type="xb_query_get_type"
           glib:type-struct="QueryClass">
      <constructor name="new"
                   c:identifier="xb_query_new"
                   version="0.1.4"
                   throws="1">
        <doc xml:space="preserve">Creates a query to be used by @silo. It may be quicker to create a query
manually and re-use it multiple times.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbQuery</doc>
          <type name="Query" c:type="XbQuery*"/>
        </return-value>
        <parameters>
          <parameter name="silo" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">The XPath query</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full"
                   c:identifier="xb_query_new_full"
                   version="0.1.6"
                   throws="1">
        <doc xml:space="preserve">Creates a query to be used by @silo. It may be quicker to create a query
manually and re-use it multiple times.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbQuery</doc>
          <type name="Query" c:type="XbQuery*"/>
        </return-value>
        <parameters>
          <parameter name="silo" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">The XPath query</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbQueryFlags, e.g. #XB_QUERY_FLAG_USE_INDEXES</doc>
            <type name="QueryFlags" c:type="XbQueryFlags"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="bind_str"
              c:identifier="xb_query_bind_str"
              version="0.1.4"
              throws="1">
        <doc xml:space="preserve">Assigns a string to a bound value specified using `?`.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the @idx existed</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbQuery</doc>
            <type name="Query" c:type="XbQuery*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">an integer index</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">string to assign to the bound variable</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="bind_val"
              c:identifier="xb_query_bind_val"
              version="0.1.4"
              throws="1">
        <doc xml:space="preserve">Assigns a string to a bound value specified using `?`.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the @idx existed</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbQuery</doc>
            <type name="Query" c:type="XbQuery*"/>
          </instance-parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve">an integer index</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="val" transfer-ownership="none">
            <doc xml:space="preserve">value to assign to the bound variable</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_limit"
              c:identifier="xb_query_get_limit"
              version="0.1.4">
        <doc xml:space="preserve">Gets the results limit on this query, where 0 is 'all'.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">integer, default 0</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbQuery</doc>
            <type name="Query" c:type="XbQuery*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_xpath"
              c:identifier="xb_query_get_xpath"
              version="0.1.4">
        <doc xml:space="preserve">Gets the XPath string that created the query.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">string</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbQuery</doc>
            <type name="Query" c:type="XbQuery*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_limit"
              c:identifier="xb_query_set_limit"
              version="0.1.4">
        <doc xml:space="preserve">Sets the results limit on this query, where 0 is 'all'.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbQuery</doc>
            <type name="Query" c:type="XbQuery*"/>
          </instance-parameter>
          <parameter name="limit" transfer-ownership="none">
            <doc xml:space="preserve">integer</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="QueryClass"
            c:type="XbQueryClass"
            glib:is-gtype-struct-for="Query">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_xb_reserved1" introspectable="0">
        <callback name="_xb_reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved2" introspectable="0">
        <callback name="_xb_reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved3" introspectable="0">
        <callback name="_xb_reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved4" introspectable="0">
        <callback name="_xb_reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved5" introspectable="0">
        <callback name="_xb_reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved6" introspectable="0">
        <callback name="_xb_reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved7" introspectable="0">
        <callback name="_xb_reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <bitfield name="QueryFlags" c:type="XbQueryFlags">
      <doc xml:space="preserve">The flags used fo query.</doc>
      <member name="none" value="0" c:identifier="XB_QUERY_FLAG_NONE">
        <doc xml:space="preserve">No extra flags to use</doc>
      </member>
      <member name="optimize" value="1" c:identifier="XB_QUERY_FLAG_OPTIMIZE">
        <doc xml:space="preserve">Optimize the query when possible</doc>
      </member>
      <member name="use_indexes"
              value="2"
              c:identifier="XB_QUERY_FLAG_USE_INDEXES">
        <doc xml:space="preserve">Use the indexed parameters</doc>
      </member>
    </bitfield>
    <class name="Silo"
           c:symbol-prefix="silo"
           c:type="XbSilo"
           parent="GObject.Object"
           glib:type-name="XbSilo"
           glib:get-type="xb_silo_get_type"
           glib:type-struct="SiloClass">
      <constructor name="new" c:identifier="xb_silo_new" version="0.1.0">
        <doc xml:space="preserve">Creates a new silo.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbSilo</doc>
          <type name="Silo" c:type="XbSilo*"/>
        </return-value>
      </constructor>
      <constructor name="new_from_xml"
                   c:identifier="xb_silo_new_from_xml"
                   version="0.1.0"
                   throws="1">
        <doc xml:space="preserve">Creates a new silo from an XML string.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #XbSilo, or %NULL</doc>
          <type name="Silo" c:type="XbSilo*"/>
        </return-value>
        <parameters>
          <parameter name="xml" transfer-ownership="none">
            <doc xml:space="preserve">XML string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="export"
              c:identifier="xb_silo_export"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Exports the silo back to XML.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">XML data, or %NULL for an error</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbNodeExportFlags, e.g. #XB_NODE_EXPORT_FLAG_NONE</doc>
            <type name="NodeExportFlags" c:type="XbNodeExportFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="export_file"
              c:identifier="xb_silo_export_file"
              version="0.1.2"
              throws="1">
        <doc xml:space="preserve">Exports the silo back to an XML file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbNodeExportFlags, e.g. #XB_NODE_EXPORT_FLAG_NONE</doc>
            <type name="NodeExportFlags" c:type="XbNodeExportFlags"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GCancellable, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_bytes"
              c:identifier="xb_silo_get_bytes"
              version="0.1.0">
        <doc xml:space="preserve">Gets the backing object that created the blob.

You should never *ever* modify this data.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">A #GBytes, or %NULL if never set</doc>
          <type name="GLib.Bytes" c:type="GBytes*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_guid" c:identifier="xb_silo_get_guid" version="0.1.0">
        <doc xml:space="preserve">Gets the GUID used to identify this silo.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a string, otherwise %NULL</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_profile_string"
              c:identifier="xb_silo_get_profile_string"
              version="0.1.1">
        <doc xml:space="preserve">Returns the profiling data. This will only return profiling text if
xb_silo_set_profile_flags() was used with %XB_SILO_PROFILE_FLAG_APPEND.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">text profiling data</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_root" c:identifier="xb_silo_get_root" version="0.1.0">
        <doc xml:space="preserve">Gets the root node for the silo. (MIGHT BE MORE).</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">A #XbNode, or %NULL for an error</doc>
          <type name="Node" c:type="XbNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_size" c:identifier="xb_silo_get_size" version="0.1.0">
        <doc xml:space="preserve">Gets the number of nodes in the silo.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a integer, or 0 is an empty blob</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="invalidate"
              c:identifier="xb_silo_invalidate"
              version="0.1.1">
        <doc xml:space="preserve">Invalidates a silo. Future calls xb_silo_is_valid() will return %FALSE.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_valid" c:identifier="xb_silo_is_valid" version="0.1.0">
        <doc xml:space="preserve">Checks is the silo is valid. The usual reason the silo is invalidated is
when the backing mmapped file has changed, or one of the imported files have
been modified.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if valid</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="load_from_bytes"
              c:identifier="xb_silo_load_from_bytes"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Loads a silo from memory location.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE for success, otherwise @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="blob" transfer-ownership="none">
            <doc xml:space="preserve">a #GBytes</doc>
            <type name="GLib.Bytes" c:type="GBytes*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">#XbSiloLoadFlags, e.g. %XB_SILO_LOAD_FLAG_NONE</doc>
            <type name="SiloLoadFlags" c:type="XbSiloLoadFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_from_file"
              c:identifier="xb_silo_load_from_file"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Loads a silo from file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE for success, otherwise @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve">#XbSiloLoadFlags, e.g. %XB_SILO_LOAD_FLAG_NONE</doc>
            <type name="SiloLoadFlags" c:type="XbSiloLoadFlags"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GCancellable, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query"
              c:identifier="xb_silo_query"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the silo using an XPath query, returning up to @limit results.

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

Please note: Only a subset of XPath is supported.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">results, or %NULL if unfound</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="Node"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">an XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="limit" transfer-ownership="none">
            <doc xml:space="preserve">maximum number of results to return, or 0 for "all"</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_build_index"
              c:identifier="xb_silo_query_build_index"
              version="0.1.4"
              throws="1">
        <doc xml:space="preserve">Adds the `attr()` or `text()` results of a query to the index.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE for success</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">An XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="attr"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">Attribute name, e.g. `type`, or NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="query_first"
              c:identifier="xb_silo_query_first"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Searches the silo using an XPath query, returning up to one result.

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

Please note: Only a tiny subset of XPath 1.0 is supported.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #XbNode, or %NULL if unfound</doc>
          <type name="Node" c:type="XbNode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="xpath" transfer-ownership="none">
            <doc xml:space="preserve">An XPath, e.g. `/components/component[@type=desktop]/id[abe.desktop]`</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="save_to_file"
              c:identifier="xb_silo_save_to_file"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Saves a silo to a file.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE for success, otherwise @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GCancellable, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_profile_flags"
              c:identifier="xb_silo_set_profile_flags"
              version="0.1.1">
        <doc xml:space="preserve">Enables or disables the collection of profiling data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="profile_flags" transfer-ownership="none">
            <doc xml:space="preserve">some #XbSiloProfileFlags, e.g. %XB_SILO_PROFILE_FLAG_DEBUG</doc>
            <type name="SiloProfileFlags" c:type="XbSiloProfileFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_string"
              c:identifier="xb_silo_to_string"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Converts the silo to an internal string representation. This is only
really useful for debugging #XbSilo itself.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">A string, or %NULL for an error</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="watch_file"
              c:identifier="xb_silo_watch_file"
              version="0.1.0"
              throws="1">
        <doc xml:space="preserve">Adds a file monitor to the silo. If the file or directory for @file changes
then the silo will be invalidated.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE for success, otherwise @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbSilo</doc>
            <type name="Silo" c:type="XbSilo*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve">a #GFile</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GCancellable, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <property name="guid"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="valid" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
    </class>
    <record name="SiloClass"
            c:type="XbSiloClass"
            glib:is-gtype-struct-for="Silo">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="_xb_reserved1" introspectable="0">
        <callback name="_xb_reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved2" introspectable="0">
        <callback name="_xb_reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved3" introspectable="0">
        <callback name="_xb_reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved4" introspectable="0">
        <callback name="_xb_reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved5" introspectable="0">
        <callback name="_xb_reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved6" introspectable="0">
        <callback name="_xb_reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="_xb_reserved7" introspectable="0">
        <callback name="_xb_reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <bitfield name="SiloLoadFlags" c:type="XbSiloLoadFlags">
      <doc xml:space="preserve">The flags for loading a silo.</doc>
      <member name="none" value="0" c:identifier="XB_SILO_LOAD_FLAG_NONE">
        <doc xml:space="preserve">No extra flags to use</doc>
      </member>
      <member name="no_magic"
              value="1"
              c:identifier="XB_SILO_LOAD_FLAG_NO_MAGIC">
        <doc xml:space="preserve">No not check header signature</doc>
      </member>
      <member name="watch_blob"
              value="2"
              c:identifier="XB_SILO_LOAD_FLAG_WATCH_BLOB">
        <doc xml:space="preserve">Watch the XMLB file for changes</doc>
      </member>
    </bitfield>
    <bitfield name="SiloProfileFlags" c:type="XbSiloProfileFlags">
      <doc xml:space="preserve">The flags used when profiling a silo.</doc>
      <member name="none" value="0" c:identifier="XB_SILO_PROFILE_FLAG_NONE">
        <doc xml:space="preserve">No extra flags to use</doc>
      </member>
      <member name="debug" value="1" c:identifier="XB_SILO_PROFILE_FLAG_DEBUG">
        <doc xml:space="preserve">Output profiling as debug</doc>
      </member>
      <member name="append"
              value="2"
              c:identifier="XB_SILO_PROFILE_FLAG_APPEND">
        <doc xml:space="preserve">Save profiling in an appended string</doc>
      </member>
      <member name="xpath" value="4" c:identifier="XB_SILO_PROFILE_FLAG_XPATH">
        <doc xml:space="preserve">Save XPATH queries</doc>
      </member>
    </bitfield>
    <record name="Stack"
            c:type="XbStack"
            glib:type-name="XbStack"
            glib:get-type="xb_stack_get_type"
            c:symbol-prefix="stack">
      <method name="pop" c:identifier="xb_stack_pop" version="0.1.3">
        <doc xml:space="preserve">Pops an opcode off the stack.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a #XbOpcode</doc>
          <type name="Opcode" c:type="XbOpcode*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="push" c:identifier="xb_stack_push" version="0.1.3">
        <doc xml:space="preserve">Pushes a new opcode onto the end of the stack</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the opcode was stored on the stack</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </instance-parameter>
          <parameter name="opcode" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="push_steal"
              c:identifier="xb_stack_push_steal"
              version="0.1.3">
        <doc xml:space="preserve">Pushes a new opcode onto the end of the stack</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the opcode was stored on the stack</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </instance-parameter>
          <parameter name="opcode" transfer-ownership="none">
            <doc xml:space="preserve">a #XbOpcode, which is consumed</doc>
            <type name="Opcode" c:type="XbOpcode*"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_string"
              c:identifier="xb_stack_to_string"
              version="0.1.4">
        <doc xml:space="preserve">Returns a string representing a stack.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">text</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #XbStack</doc>
            <type name="Stack" c:type="XbStack*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <function name="opcode_kind_from_string"
              c:identifier="xb_opcode_kind_from_string"
              moved-to="Opcode.kind_from_string"
              version="0.1.1">
      <doc xml:space="preserve">Converts a string to an opcode kind.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a #XbOpcodeKind, e.g. %XB_OPCODE_KIND_TEXT</doc>
        <type name="OpcodeKind" c:type="XbOpcodeKind"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <doc xml:space="preserve">a string, e.g. `FUNC`</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </function>
    <function name="opcode_kind_to_string"
              c:identifier="xb_opcode_kind_to_string"
              moved-to="Opcode.kind_to_string"
              version="0.1.1">
      <doc xml:space="preserve">Converts the opcode kind to a string.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">opcode kind, e.g. `FUNC`</doc>
        <type name="utf8" c:type="const gchar*"/>
      </return-value>
      <parameters>
        <parameter name="kind" transfer-ownership="none">
          <doc xml:space="preserve">a #XbOpcodeKind, e.g. %XB_OPCODE_KIND_FUNCTION</doc>
          <type name="OpcodeKind" c:type="XbOpcodeKind"/>
        </parameter>
      </parameters>
    </function>
    <function name="string_append_union"
              c:identifier="xb_string_append_union"
              version="0.1.2"
              introspectable="0">
      <doc xml:space="preserve">Appends an XPath query into the string, automatically adding the union
operator (`|`) if required.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="xpath" transfer-ownership="none">
          <doc xml:space="preserve">The #GString to operate on</doc>
          <type name="GLib.String" c:type="GString*"/>
        </parameter>
        <parameter name="fmt" transfer-ownership="none">
          <doc xml:space="preserve">The format string</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="..." transfer-ownership="none">
          <doc xml:space="preserve">varargs for @fmt</doc>
          <varargs/>
        </parameter>
      </parameters>
    </function>
    <function name="string_escape"
              c:identifier="xb_string_escape"
              version="0.1.2">
      <doc xml:space="preserve">Escapes XPath control sequences such as newlines, tabs, and forward slashes.</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">new string that is safe to use for queries</doc>
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="str" transfer-ownership="none">
          <doc xml:space="preserve">string, e.g. `app/org.gnome.ghex/x86_64/stable`</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </function>
  </namespace>
</repository>
