Initial packaging for Tizen
[profile/ivi/gobject-introspection.git] / docs / reference / html / gi-gtypelib.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>gtypelib</title>
6 <meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
7 <link rel="home" href="index.html" title="GObject Introspection Reference Manual">
8 <link rel="up" href="gi-typelib.html" title="Typelib binary format">
9 <link rel="prev" href="gi-typelib.html" title="Typelib binary format">
10 <link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
11 <meta name="generator" content="GTK-Doc V1.18.1 (XML mode)">
12 <link rel="stylesheet" href="style.css" type="text/css">
13 </head>
14 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
16 <tr valign="middle">
17 <td><a accesskey="p" href="gi-typelib.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
18 <td><a accesskey="u" href="gi-typelib.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
19 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
20 <th width="100%" align="center">GObject Introspection Reference Manual</th>
21 <td><a accesskey="n" href="annotation-glossary.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
22 </tr>
23 <tr><td colspan="5" class="shortcuts">
24 <a href="#gi-gtypelib.synopsis" class="shortcut">Top</a>
25                    | 
26                   <a href="#gi-gtypelib.description" class="shortcut">Description</a>
27 </td></tr>
28 </table>
29 <div class="refentry">
30 <a name="gi-gtypelib"></a><div class="titlepage"></div>
31 <div class="refnamediv"><table width="100%"><tr>
32 <td valign="top">
33 <h2><span class="refentrytitle"><a name="gi-gtypelib.top_of_page"></a>gtypelib</span></h2>
34 <p>gtypelib — Layout and accessors for typelib</p>
35 </td>
36 <td valign="top" align="right"></td>
37 </tr></table></div>
38 <div class="refsect1">
39 <a name="gi-gtypelib.stability-level"></a><h2>Stability Level</h2>
40 Stable, unless otherwise indicated
41 </div>
42 <div class="refsynopsisdiv">
43 <a name="gi-gtypelib.synopsis"></a><h2>Synopsis</h2>
44 <pre class="synopsis">#define             <a class="link" href="gi-gtypelib.html#G-IR-MAGIC:CAPS" title="G_IR_MAGIC">G_IR_MAGIC</a>
45 enum                <a class="link" href="gi-gtypelib.html#GTypelibBlobType" title="enum GTypelibBlobType">GTypelibBlobType</a>;
46                     <a class="link" href="gi-gtypelib.html#Header" title="Header">Header</a>;
47                     <a class="link" href="gi-gtypelib.html#DirEntry" title="DirEntry">DirEntry</a>;
48                     <a class="link" href="gi-gtypelib.html#ArgBlob" title="ArgBlob">ArgBlob</a>;
49                     <a class="link" href="gi-gtypelib.html#SignatureBlob" title="SignatureBlob">SignatureBlob</a>;
50                     <a class="link" href="gi-gtypelib.html#CommonBlob" title="CommonBlob">CommonBlob</a>;
51                     <a class="link" href="gi-gtypelib.html#FunctionBlob" title="FunctionBlob">FunctionBlob</a>;
52                     <a class="link" href="gi-gtypelib.html#CallbackBlob" title="CallbackBlob">CallbackBlob</a>;
53                     <a class="link" href="gi-gtypelib.html#InterfaceTypeBlob" title="InterfaceTypeBlob">InterfaceTypeBlob</a>;
54                     <a class="link" href="gi-gtypelib.html#ParamTypeBlob" title="ParamTypeBlob">ParamTypeBlob</a>;
55                     <a class="link" href="gi-gtypelib.html#ErrorTypeBlob" title="ErrorTypeBlob">ErrorTypeBlob</a>;
56                     <a class="link" href="gi-gtypelib.html#ValueBlob" title="ValueBlob">ValueBlob</a>;
57                     <a class="link" href="gi-gtypelib.html#FieldBlob" title="FieldBlob">FieldBlob</a>;
58                     <a class="link" href="gi-gtypelib.html#RegisteredTypeBlob" title="RegisteredTypeBlob">RegisteredTypeBlob</a>;
59                     <a class="link" href="gi-gtypelib.html#StructBlob" title="StructBlob">StructBlob</a>;
60                     <a class="link" href="gi-gtypelib.html#UnionBlob" title="UnionBlob">UnionBlob</a>;
61                     <a class="link" href="gi-gtypelib.html#EnumBlob" title="EnumBlob">EnumBlob</a>;
62                     <a class="link" href="gi-gtypelib.html#PropertyBlob" title="PropertyBlob">PropertyBlob</a>;
63                     <a class="link" href="gi-gtypelib.html#SignalBlob" title="SignalBlob">SignalBlob</a>;
64                     <a class="link" href="gi-gtypelib.html#VFuncBlob" title="VFuncBlob">VFuncBlob</a>;
65                     <a class="link" href="gi-gtypelib.html#ObjectBlob" title="ObjectBlob">ObjectBlob</a>;
66                     <a class="link" href="gi-gtypelib.html#InterfaceBlob" title="InterfaceBlob">InterfaceBlob</a>;
67                     <a class="link" href="gi-gtypelib.html#ConstantBlob" title="ConstantBlob">ConstantBlob</a>;
68                     <a class="link" href="gi-gtypelib.html#AttributeBlob" title="AttributeBlob">AttributeBlob</a>;
69 <a class="link" href="gi-gtypelib.html#DirEntry" title="DirEntry"><span class="returnvalue">DirEntry</span></a> *          <a class="link" href="gi-gtypelib.html#g-typelib-get-dir-entry" title="g_typelib_get_dir_entry ()">g_typelib_get_dir_entry</a>             (<em class="parameter"><code><a class="link" href="gi-girepository.html#GITypelib" title="GITypelib"><span class="type">GITypelib</span></a> *typelib</code></em>,
70                                                          <em class="parameter"><code><span class="type">guint16</span> index</code></em>);
71 <span class="returnvalue">void</span>                <a class="link" href="gi-gtypelib.html#g-typelib-check-sanity" title="g_typelib_check_sanity ()">g_typelib_check_sanity</a>              (<em class="parameter"><code><span class="type">void</span></code></em>);
72 #define             <a class="link" href="gi-gtypelib.html#g-typelib-get-string" title="g_typelib_get_string()">g_typelib_get_string</a>                (typelib,
73                                                          offset)
74 #define             <a class="link" href="gi-gtypelib.html#G-TYPELIB-ERROR:CAPS" title="G_TYPELIB_ERROR">G_TYPELIB_ERROR</a>
75 <span class="returnvalue">gboolean</span>            <a class="link" href="gi-gtypelib.html#g-typelib-validate" title="g_typelib_validate ()">g_typelib_validate</a>                  (<em class="parameter"><code><a class="link" href="gi-girepository.html#GITypelib" title="GITypelib"><span class="type">GITypelib</span></a> *typelib</code></em>,
76                                                          <em class="parameter"><code><span class="type">GError</span> **error</code></em>);
77 #define             <a class="link" href="gi-gtypelib.html#BLOB-IS-REGISTERED-TYPE:CAPS" title="BLOB_IS_REGISTERED_TYPE()">BLOB_IS_REGISTERED_TYPE</a>             (blob)
78 </pre>
79 </div>
80 <div class="refsect1">
81 <a name="gi-gtypelib.description"></a><h2>Description</h2>
82 <p>
83 The "typelib" is a binary, readonly, memory-mappable database
84 containing reflective information about a GObject library.
85 </p>
86 <p>
87 The format of GObject typelib is strongly influenced by the Mozilla XPCOM
88 format.
89 </p>
90 <p>
91 Some of the differences to XPCOM include:
92 </p>
93 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
94 <li class="listitem"><p>Type information is stored not quite as compactly (XPCOM stores it inline
95 in function descriptions in variable-sized blobs of 1 to n bytes. We store
96 16 bits of type information for each parameter, which is enough to encode
97 simple types inline. Complex (e.g. recursive) types are stored out of line
98 in a separate list of types.</p></li>
99 <li class="listitem"><p>String and complex type data is stored outside of typelib entry blobs,
100 references are stored as offsets relative to the start of the typelib.
101 One possibility is to store the strings and types in a pools at the end
102 of the typelib.</p></li>
103 </ul></div>
104 <p>
105 </p>
106 <p>
107 The typelib has the following general format.
108 </p>
109 <p>
110 typelib ::= header, section-index, directory, blobs, attributes, attributedata
111 </p>
112 <p>
113 directory ::= list of entries
114 </p>
115 <p>
116 entry ::= blob type, name, namespace, offset
117 blob ::= function|callback|struct|boxed|enum|flags|object|interface|constant|union
118 attributes ::= list of attributes, sorted by offset
119 attribute ::= offset, key, value
120 attributedata ::= string data for attributes
121 </p>
122 <p>
123 Details
124 </p>
125 <p>
126 We describe the fragments that make up the typelib in the form of C structs
127 (although some fall short of being valid C structs since they contain multiple
128 flexible arrays).
129 </p>
130 </div>
131 <div class="refsect1">
132 <a name="gi-gtypelib.details"></a><h2>Details</h2>
133 <div class="refsect2">
134 <a name="G-IR-MAGIC:CAPS"></a><h3>G_IR_MAGIC</h3>
135 <pre class="programlisting">#define G_IR_MAGIC "GOBJ\nMETADATA\r\n\032"
136 </pre>
137 <p>
138 Identifying prefix for the typelib.  This was inspired by XPCOM,
139 which in turn borrowed from PNG.
140 </p>
141 </div>
142 <hr>
143 <div class="refsect2">
144 <a name="GTypelibBlobType"></a><h3>enum GTypelibBlobType</h3>
145 <pre class="programlisting">typedef enum {
146   BLOB_TYPE_INVALID,
147   BLOB_TYPE_FUNCTION,
148   BLOB_TYPE_CALLBACK,
149   BLOB_TYPE_STRUCT,
150   BLOB_TYPE_BOXED,
151   BLOB_TYPE_ENUM,
152   BLOB_TYPE_FLAGS,
153   BLOB_TYPE_OBJECT,
154   BLOB_TYPE_INTERFACE,
155   BLOB_TYPE_CONSTANT,
156   BLOB_TYPE_INVALID_0, /* DELETED - used to be ErrorDomain */
157   BLOB_TYPE_UNION
158 } GTypelibBlobType;
159 </pre>
160 <p>
161 The integral value of this enumeration appears in each "Blob"
162 component of a typelib to identify its type.
163 </p>
164 <div class="variablelist"><table border="0">
165 <col align="left" valign="top">
166 <tbody>
167 <tr>
168 <td><p><a name="BLOB-TYPE-INVALID:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_INVALID</code></span></p></td>
169 <td>Should not appear in code
170 </td>
171 </tr>
172 <tr>
173 <td><p><a name="BLOB-TYPE-FUNCTION:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_FUNCTION</code></span></p></td>
174 <td>A <a class="link" href="gi-gtypelib.html#FunctionBlob" title="FunctionBlob"><span class="type">FunctionBlob</span></a>
175 </td>
176 </tr>
177 <tr>
178 <td><p><a name="BLOB-TYPE-CALLBACK:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_CALLBACK</code></span></p></td>
179 <td>A <a class="link" href="gi-gtypelib.html#CallbackBlob" title="CallbackBlob"><span class="type">CallbackBlob</span></a>
180 </td>
181 </tr>
182 <tr>
183 <td><p><a name="BLOB-TYPE-STRUCT:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_STRUCT</code></span></p></td>
184 <td>A <a class="link" href="gi-gtypelib.html#StructBlob" title="StructBlob"><span class="type">StructBlob</span></a>
185 </td>
186 </tr>
187 <tr>
188 <td><p><a name="BLOB-TYPE-BOXED:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_BOXED</code></span></p></td>
189 <td>Can be either a <a class="link" href="gi-gtypelib.html#StructBlob" title="StructBlob"><span class="type">StructBlob</span></a> or <a class="link" href="gi-gtypelib.html#UnionBlob" title="UnionBlob"><span class="type">UnionBlob</span></a>
190 </td>
191 </tr>
192 <tr>
193 <td><p><a name="BLOB-TYPE-ENUM:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_ENUM</code></span></p></td>
194 <td>An <a class="link" href="gi-gtypelib.html#EnumBlob" title="EnumBlob"><span class="type">EnumBlob</span></a>
195 </td>
196 </tr>
197 <tr>
198 <td><p><a name="BLOB-TYPE-FLAGS:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_FLAGS</code></span></p></td>
199 <td>An <a class="link" href="gi-gtypelib.html#EnumBlob" title="EnumBlob"><span class="type">EnumBlob</span></a>
200 </td>
201 </tr>
202 <tr>
203 <td><p><a name="BLOB-TYPE-OBJECT:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_OBJECT</code></span></p></td>
204 <td>An <a class="link" href="gi-gtypelib.html#ObjectBlob" title="ObjectBlob"><span class="type">ObjectBlob</span></a>
205 </td>
206 </tr>
207 <tr>
208 <td><p><a name="BLOB-TYPE-INTERFACE:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_INTERFACE</code></span></p></td>
209 <td>An <a class="link" href="gi-gtypelib.html#InterfaceBlob" title="InterfaceBlob"><span class="type">InterfaceBlob</span></a>
210 </td>
211 </tr>
212 <tr>
213 <td><p><a name="BLOB-TYPE-CONSTANT:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_CONSTANT</code></span></p></td>
214 <td>A <a class="link" href="gi-gtypelib.html#ConstantBlob" title="ConstantBlob"><span class="type">ConstantBlob</span></a>
215 </td>
216 </tr>
217 <tr>
218 <td><p><a name="BLOB-TYPE-INVALID-0:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_INVALID_0</code></span></p></td>
219 <td></td>
220 </tr>
221 <tr>
222 <td><p><a name="BLOB-TYPE-UNION:CAPS"></a><span class="term"><code class="literal">BLOB_TYPE_UNION</code></span></p></td>
223 <td>A <a class="link" href="gi-gtypelib.html#UnionBlob" title="UnionBlob"><span class="type">UnionBlob</span></a>
224 </td>
225 </tr>
226 </tbody>
227 </table></div>
228 </div>
229 <hr>
230 <div class="refsect2">
231 <a name="Header"></a><h3>Header</h3>
232 <pre class="programlisting">typedef struct {
233   gchar   magic[16];
234   guint8  major_version;
235   guint8  minor_version;
236   guint16 n_entries;
237   guint16 n_local_entries;
238   guint32 directory;
239   guint32 n_attributes;
240   guint32 attributes;
241
242   guint32 dependencies;
243
244   guint32 size;
245   guint32 namespace;
246   guint32 nsversion;
247   guint32 shared_library;
248   guint32 c_prefix;
249
250   guint16 entry_blob_size;
251   guint16 function_blob_size;
252   guint16 callback_blob_size;
253   guint16 signal_blob_size;
254   guint16 vfunc_blob_size;
255   guint16 arg_blob_size;
256   guint16 property_blob_size;
257   guint16 field_blob_size;
258   guint16 value_blob_size;
259   guint16 attribute_blob_size;
260   guint16 constant_blob_size;
261   guint16 error_domain_blob_size;
262
263   guint16 signature_blob_size;
264   guint16 enum_blob_size;
265   guint16 struct_blob_size;
266   guint16 object_blob_size;
267   guint16 interface_blob_size;
268   guint16 union_blob_size;
269
270   guint32 sections;
271 } Header;
272 </pre>
273 <p>
274 The header structure appears exactly once at the beginning of a typelib.  It is a
275 collection of meta-information, such as the number of entries and dependencies.
276 </p>
277 <div class="variablelist"><table border="0">
278 <col align="left" valign="top">
279 <tbody>
280 <tr>
281 <td><p><span class="term"><span class="type">gchar</span> <em class="structfield"><code><a name="Header.magic"></a>magic</code></em>[16];</span></p></td>
282 <td>See <a class="link" href="gi-gtypelib.html#G-IR-MAGIC:CAPS" title="G_IR_MAGIC"><span class="type">G_IR_MAGIC</span></a>.</td>
283 </tr>
284 <tr>
285 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="Header.major-version"></a>major_version</code></em>;</span></p></td>
286 <td>The version of the typelib format. Minor version changes indicate
287 compatible changes and should still allow the typelib to be parsed
288 by a parser designed for the same major_version.</td>
289 </tr>
290 <tr>
291 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="Header.minor-version"></a>minor_version</code></em>;</span></p></td>
292 <td>See major_version.</td>
293 </tr>
294 <tr>
295 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.n-entries"></a>n_entries</code></em>;</span></p></td>
296 <td>The number of entries in the directory.</td>
297 </tr>
298 <tr>
299 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.n-local-entries"></a>n_local_entries</code></em>;</span></p></td>
300 <td>The number of entries referring to blobs in this typelib. The
301 local entries must occur before the unresolved entries.</td>
302 </tr>
303 <tr>
304 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.directory"></a>directory</code></em>;</span></p></td>
305 <td>Offset of the directory in the typelib.</td>
306 </tr>
307 <tr>
308 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.n-attributes"></a>n_attributes</code></em>;</span></p></td>
309 <td>Number of attribute blocks</td>
310 </tr>
311 <tr>
312 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.attributes"></a>attributes</code></em>;</span></p></td>
313 <td>Offset of the list of attributes in the typelib.</td>
314 </tr>
315 <tr>
316 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.dependencies"></a>dependencies</code></em>;</span></p></td>
317 <td>Offset of a single string, which is the list of
318 dependencies, separated by the '|' character.  The
319 dependencies are required in order to avoid having programs
320 consuming a typelib check for an "Unresolved" type return
321 from every API call.</td>
322 </tr>
323 <tr>
324 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.size"></a>size</code></em>;</span></p></td>
325 <td>The size in bytes of the typelib.</td>
326 </tr>
327 <tr>
328 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.namespace"></a>namespace</code></em>;</span></p></td>
329 <td>Offset of the namespace string in the typelib.</td>
330 </tr>
331 <tr>
332 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.nsversion"></a>nsversion</code></em>;</span></p></td>
333 <td>Offset of the namespace version string in the typelib.</td>
334 </tr>
335 <tr>
336 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.shared-library"></a>shared_library</code></em>;</span></p></td>
337 <td>This field is the set of shared libraries associated
338 with the typelib.  The entries are separated by the '|' (pipe) character.</td>
339 </tr>
340 <tr>
341 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.c-prefix"></a>c_prefix</code></em>;</span></p></td>
342 <td>The prefix for the function names of the library</td>
343 </tr>
344 <tr>
345 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.entry-blob-size"></a>entry_blob_size</code></em>;</span></p></td>
346 <td>The sizes of fixed-size blobs. Recording this information here
347 allows to write parser which continue to work if the format is
348 extended by adding new fields to the end of the fixed-size blobs.</td>
349 </tr>
350 <tr>
351 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.function-blob-size"></a>function_blob_size</code></em>;</span></p></td>
352 <td>See above.</td>
353 </tr>
354 <tr>
355 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.callback-blob-size"></a>callback_blob_size</code></em>;</span></p></td>
356 <td>See above.</td>
357 </tr>
358 <tr>
359 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.signal-blob-size"></a>signal_blob_size</code></em>;</span></p></td>
360 <td>See above.</td>
361 </tr>
362 <tr>
363 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.vfunc-blob-size"></a>vfunc_blob_size</code></em>;</span></p></td>
364 <td>See above.</td>
365 </tr>
366 <tr>
367 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.arg-blob-size"></a>arg_blob_size</code></em>;</span></p></td>
368 <td>See above.</td>
369 </tr>
370 <tr>
371 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.property-blob-size"></a>property_blob_size</code></em>;</span></p></td>
372 <td>See above.</td>
373 </tr>
374 <tr>
375 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.field-blob-size"></a>field_blob_size</code></em>;</span></p></td>
376 <td>See above.</td>
377 </tr>
378 <tr>
379 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.value-blob-size"></a>value_blob_size</code></em>;</span></p></td>
380 <td>See above.</td>
381 </tr>
382 <tr>
383 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.attribute-blob-size"></a>attribute_blob_size</code></em>;</span></p></td>
384 <td>See above.</td>
385 </tr>
386 <tr>
387 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.constant-blob-size"></a>constant_blob_size</code></em>;</span></p></td>
388 <td>See above.</td>
389 </tr>
390 <tr>
391 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.error-domain-blob-size"></a>error_domain_blob_size</code></em>;</span></p></td>
392 <td>See above.</td>
393 </tr>
394 <tr>
395 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.signature-blob-size"></a>signature_blob_size</code></em>;</span></p></td>
396 <td>See above.</td>
397 </tr>
398 <tr>
399 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.enum-blob-size"></a>enum_blob_size</code></em>;</span></p></td>
400 <td>See above.</td>
401 </tr>
402 <tr>
403 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.struct-blob-size"></a>struct_blob_size</code></em>;</span></p></td>
404 <td>See above.</td>
405 </tr>
406 <tr>
407 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.object-blob-size"></a>object_blob_size</code></em>;</span></p></td>
408 <td>See above.</td>
409 </tr>
410 <tr>
411 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.interface-blob-size"></a>interface_blob_size</code></em>;</span></p></td>
412 <td>For variable-size blobs, the size of the struct up to the first
413 flexible array member. Recording this information here allows to
414 write parser which continue to work if the format is extended by
415 adding new fields before the first flexible array member in
416 variable-size blobs.</td>
417 </tr>
418 <tr>
419 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="Header.union-blob-size"></a>union_blob_size</code></em>;</span></p></td>
420 <td>See above.</td>
421 </tr>
422 <tr>
423 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="Header.sections"></a>sections</code></em>;</span></p></td>
424 <td>Offset of section blob array</td>
425 </tr>
426 </tbody>
427 </table></div>
428 </div>
429 <hr>
430 <div class="refsect2">
431 <a name="DirEntry"></a><h3>DirEntry</h3>
432 <pre class="programlisting">typedef struct {
433   guint16 blob_type;
434
435   guint16 local    : 1;
436   guint32 name;
437   guint32 offset;
438 } DirEntry;
439 </pre>
440 <p>
441 References to directory entries are stored as 1-based 16-bit indexes.
442 </p>
443 <p>
444 All blobs pointed to by a directory entry start with the same layout for
445 the first 8 bytes (the reserved flags may be used by some blob types)
446 </p>
447 <div class="variablelist"><table border="0">
448 <col align="left" valign="top">
449 <tbody>
450 <tr>
451 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="DirEntry.blob-type"></a>blob_type</code></em>;</span></p></td>
452 <td>A <a class="link" href="gi-gtypelib.html#GTypelibBlobType" title="enum GTypelibBlobType"><span class="type">GTypelibBlobType</span></a>
453 </td>
454 </tr>
455 <tr>
456 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="DirEntry.local"></a>local</code></em> : 1;</span></p></td>
457 <td>Whether this entry refers to a blob in this typelib.</td>
458 </tr>
459 <tr>
460 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="DirEntry.name"></a>name</code></em>;</span></p></td>
461 <td>The name of the entry.</td>
462 </tr>
463 <tr>
464 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="DirEntry.offset"></a>offset</code></em>;</span></p></td>
465 <td>If is_local is set, this is the offset of the blob in the typelib.
466 Otherwise, it is the offset of the namespace in which the blob has
467 to be looked up by name.</td>
468 </tr>
469 </tbody>
470 </table></div>
471 </div>
472 <hr>
473 <div class="refsect2">
474 <a name="ArgBlob"></a><h3>ArgBlob</h3>
475 <pre class="programlisting">typedef struct {
476   guint32        name;
477
478   guint          in                           : 1;
479   guint          out                          : 1;
480   guint          caller_allocates             : 1;
481   guint          allow_none                   : 1;
482   guint          optional                     : 1;
483   guint          transfer_ownership           : 1;
484   guint          transfer_container_ownership : 1;
485   guint          return_value                 : 1;
486   guint          scope                        : 3;
487   guint          skip                         : 1;
488   gint8        closure;
489   gint8        destroy;
490
491
492   SimpleTypeBlob arg_type;
493 } ArgBlob;
494 </pre>
495 <p>
496 Types are specified by four bytes. If the three high bytes are zero,
497 the low byte describes a basic type, otherwise the 32bit number is an
498 offset which points to a TypeBlob.
499 </p>
500 <div class="variablelist"><table border="0">
501 <col align="left" valign="top">
502 <tbody>
503 <tr>
504 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ArgBlob.name"></a>name</code></em>;</span></p></td>
505 <td>A suggested name for the parameter.</td>
506 </tr>
507 <tr>
508 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.in"></a>in</code></em> : 1;</span></p></td>
509 <td>The parameter is an input to the function</td>
510 </tr>
511 <tr>
512 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.out"></a>out</code></em> : 1;</span></p></td>
513 <td>The parameter is used to return an output of the function.
514 Parameters can be both in and out. Out parameters implicitly
515 add another level of indirection to the parameter type. Ie if
516 the type is uint32 in an out parameter, the function actually
517 takes an uint32*.</td>
518 </tr>
519 <tr>
520 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.caller-allocates"></a>caller_allocates</code></em> : 1;</span></p></td>
521 <td>The parameter is a pointer to a struct or object that will
522 receive an output of the function.</td>
523 </tr>
524 <tr>
525 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.allow-none"></a>allow_none</code></em> : 1;</span></p></td>
526 <td>Only meaningful for types which are passed as pointers.
527 For an in parameter, indicates if it is ok to pass NULL in, for
528 an out parameter, whether it may return NULL. Note that NULL is a
529 valid GList and GSList value, thus allow_none will normally be set
530 for parameters of these types.</td>
531 </tr>
532 <tr>
533 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.optional"></a>optional</code></em> : 1;</span></p></td>
534 <td>For an out parameter, indicates that NULL may be passed in
535 if the value is not needed.</td>
536 </tr>
537 <tr>
538 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.transfer-ownership"></a>transfer_ownership</code></em> : 1;</span></p></td>
539 <td>For an in parameter, indicates that the function takes over
540 ownership of the parameter value. For an out parameter, it
541 indicates that the caller is responsible for freeing the return
542 value.</td>
543 </tr>
544 <tr>
545 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.transfer-container-ownership"></a>transfer_container_ownership</code></em> : 1;</span></p></td>
546 <td>For container types, indicates that the
547 ownership of the container,  but not of its contents is transferred. This is typically the case
548 for out parameters returning lists of statically allocated things.</td>
549 </tr>
550 <tr>
551 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.return-value"></a>return_value</code></em> : 1;</span></p></td>
552 <td>The parameter should be considered the return value of the function.
553 Only out parameters can be marked as return value, and there can be
554 at most one per function call. If an out parameter is marked as
555 return value, the actual return value of the function should be
556 either void or a boolean indicating the success of the call.</td>
557 </tr>
558 <tr>
559 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.scope"></a>scope</code></em> : 3;</span></p></td>
560 <td>A <a class="link" href="gi-GIArgInfo.html#GIScopeType" title="enum GIScopeType"><span class="type">GIScopeType</span></a>. If the parameter is of a callback type, this denotes the scope
561 of the user_data and the callback function pointer itself
562 (for languages that emit code at run-time).</td>
563 </tr>
564 <tr>
565 <td><p><span class="term"><span class="type">guint</span> <em class="structfield"><code><a name="ArgBlob.skip"></a>skip</code></em> : 1;</span></p></td>
566 <td>Indicates that the parameter is only useful in C and should be skipped.</td>
567 </tr>
568 <tr>
569 <td><p><span class="term"><span class="type">gint8</span> <em class="structfield"><code><a name="ArgBlob.closure"></a>closure</code></em>;</span></p></td>
570 <td>Index of the closure (user_data) parameter associated with the callback,
571 or -1.</td>
572 </tr>
573 <tr>
574 <td><p><span class="term"><span class="type">gint8</span> <em class="structfield"><code><a name="ArgBlob.destroy"></a>destroy</code></em>;</span></p></td>
575 <td>Index of the destroy notfication callback parameter associated with
576 the callback, or -1.</td>
577 </tr>
578 <tr>
579 <td><p><span class="term"><span class="type">SimpleTypeBlob</span> <em class="structfield"><code><a name="ArgBlob.arg-type"></a>arg_type</code></em>;</span></p></td>
580 <td>Describes the type of the parameter. See details below.</td>
581 </tr>
582 </tbody>
583 </table></div>
584 </div>
585 <hr>
586 <div class="refsect2">
587 <a name="SignatureBlob"></a><h3>SignatureBlob</h3>
588 <pre class="programlisting">typedef struct {
589   SimpleTypeBlob return_type;
590
591   guint16        may_return_null              : 1;
592   guint16        caller_owns_return_value     : 1;
593   guint16        caller_owns_return_container : 1;
594   guint16        skip_return                  : 1;
595   guint16        reserved                     :12;
596
597   guint16        n_arguments;
598
599   ArgBlob        arguments[];
600 } SignatureBlob;
601 </pre>
602 <div class="variablelist"><table border="0">
603 <col align="left" valign="top">
604 <tbody>
605 <tr>
606 <td><p><span class="term"><span class="type">SimpleTypeBlob</span> <em class="structfield"><code><a name="SignatureBlob.return-type"></a>return_type</code></em>;</span></p></td>
607 <td>Describes the type of the return value. See details below.</td>
608 </tr>
609 <tr>
610 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignatureBlob.may-return-null"></a>may_return_null</code></em> : 1;</span></p></td>
611 <td>Only relevant for pointer types. Indicates whether the caller
612 must expect NULL as a return value.</td>
613 </tr>
614 <tr>
615 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignatureBlob.caller-owns-return-value"></a>caller_owns_return_value</code></em> : 1;</span></p></td>
616 <td>If set, the caller is responsible for freeing the return value
617 if it is no longer needed.</td>
618 </tr>
619 <tr>
620 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignatureBlob.caller-owns-return-container"></a>caller_owns_return_container</code></em> : 1;</span></p></td>
621 <td>This flag is only relevant if the return type is a container type.
622 If the flag is set, the caller is resonsible for freeing the
623 container, but not its contents.</td>
624 </tr>
625 <tr>
626 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignatureBlob.skip-return"></a>skip_return</code></em> : 1;</span></p></td>
627 <td>Indicates that the return value is only useful in C and should be skipped.</td>
628 </tr>
629 <tr>
630 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignatureBlob.reserved"></a>reserved</code></em> :12;</span></p></td>
631 <td></td>
632 </tr>
633 <tr>
634 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignatureBlob.n-arguments"></a>n_arguments</code></em>;</span></p></td>
635 <td>The number of arguments that this function expects, also the length
636 of the array of ArgBlobs.</td>
637 </tr>
638 <tr>
639 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#ArgBlob" title="ArgBlob"><span class="type">ArgBlob</span></a> <em class="structfield"><code><a name="SignatureBlob.arguments"></a>arguments</code></em>[];</span></p></td>
640 <td>An array of ArgBlob for the arguments of the function.</td>
641 </tr>
642 </tbody>
643 </table></div>
644 </div>
645 <hr>
646 <div class="refsect2">
647 <a name="CommonBlob"></a><h3>CommonBlob</h3>
648 <pre class="programlisting">typedef struct {
649   guint16 blob_type;  /* 1 */
650
651   guint16 deprecated : 1;
652   guint32 name;
653 } CommonBlob;
654 </pre>
655 <p>
656 The <a class="link" href="gi-gtypelib.html#CommonBlob" title="CommonBlob"><span class="type">CommonBlob</span></a> is shared between <a class="link" href="gi-gtypelib.html#FunctionBlob" title="FunctionBlob"><span class="type">FunctionBlob</span></a>,
657 <a class="link" href="gi-gtypelib.html#CallbackBlob" title="CallbackBlob"><span class="type">CallbackBlob</span></a>, <a class="link" href="gi-gtypelib.html#SignalBlob" title="SignalBlob"><span class="type">SignalBlob</span></a>.
658 </p>
659 <div class="variablelist"><table border="0">
660 <col align="left" valign="top">
661 <tbody>
662 <tr>
663 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="CommonBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
664 <td>A <a class="link" href="gi-gtypelib.html#GTypelibBlobType" title="enum GTypelibBlobType"><span class="type">GTypelibBlobType</span></a>
665 </td>
666 </tr>
667 <tr>
668 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="CommonBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
669 <td>Whether the blob is deprecated.</td>
670 </tr>
671 <tr>
672 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="CommonBlob.name"></a>name</code></em>;</span></p></td>
673 <td>The name of the blob.</td>
674 </tr>
675 </tbody>
676 </table></div>
677 </div>
678 <hr>
679 <div class="refsect2">
680 <a name="FunctionBlob"></a><h3>FunctionBlob</h3>
681 <pre class="programlisting">typedef struct {
682   guint16 blob_type;  /* 1 */
683
684   guint16 deprecated  : 1;
685   guint16 setter      : 1;
686   guint16 getter      : 1;
687   guint16 constructor : 1;
688   guint16 wraps_vfunc : 1;
689   guint16 throws      : 1;
690   guint16 index       :10;
691   /* Note the bits above need to match CommonBlob
692    * and are thus exhausted, extend things using
693    * the reserved block below. */
694
695   guint32 name;
696   guint32 symbol;
697   guint32 signature;
698
699   guint16 is_static   : 1;
700   guint16 reserved    : 15;
701   guint16 reserved2   : 16;
702 } FunctionBlob;
703 </pre>
704 <div class="variablelist"><table border="0">
705 <col align="left" valign="top">
706 <tbody>
707 <tr>
708 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
709 <td></td>
710 </tr>
711 <tr>
712 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
713 <td>The function is deprecated.</td>
714 </tr>
715 <tr>
716 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.setter"></a>setter</code></em> : 1;</span></p></td>
717 <td>The function is a setter for a property. Language bindings may
718 prefer to not bind individual setters and rely on the generic
719 <code class="function">g_object_set()</code>.</td>
720 </tr>
721 <tr>
722 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.getter"></a>getter</code></em> : 1;</span></p></td>
723 <td>The function is a getter for a property. Language bindings may
724 prefer to not bind individual getters and rely on the generic
725 <code class="function">g_object_get()</code>.</td>
726 </tr>
727 <tr>
728 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.constructor"></a>constructor</code></em> : 1;</span></p></td>
729 <td>The function acts as a constructor for the object it is contained
730 in.</td>
731 </tr>
732 <tr>
733 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.wraps-vfunc"></a>wraps_vfunc</code></em> : 1;</span></p></td>
734 <td>The function is a simple wrapper for a virtual function.</td>
735 </tr>
736 <tr>
737 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.throws"></a>throws</code></em> : 1;</span></p></td>
738 <td></td>
739 </tr>
740 <tr>
741 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.index"></a>index</code></em> :10;</span></p></td>
742 <td>Index of the property that this function is a setter or getter of
743 in the array of properties of the containing interface, or index
744 of the virtual function that this function wraps.</td>
745 </tr>
746 <tr>
747 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="FunctionBlob.name"></a>name</code></em>;</span></p></td>
748 <td></td>
749 </tr>
750 <tr>
751 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="FunctionBlob.symbol"></a>symbol</code></em>;</span></p></td>
752 <td>The symbol which can be used to obtain the function pointer with
753 <code class="function">dlsym()</code>.</td>
754 </tr>
755 <tr>
756 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="FunctionBlob.signature"></a>signature</code></em>;</span></p></td>
757 <td>Offset of the SignatureBlob describing the parameter types and the
758 return value type.</td>
759 </tr>
760 <tr>
761 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.is-static"></a>is_static</code></em> : 1;</span></p></td>
762 <td>The function is a "static method"; in other words it's a pure
763 function whose name is conceptually scoped to the object.</td>
764 </tr>
765 <tr>
766 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.reserved"></a>reserved</code></em> : 15;</span></p></td>
767 <td></td>
768 </tr>
769 <tr>
770 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FunctionBlob.reserved2"></a>reserved2</code></em> : 16;</span></p></td>
771 <td></td>
772 </tr>
773 </tbody>
774 </table></div>
775 </div>
776 <hr>
777 <div class="refsect2">
778 <a name="CallbackBlob"></a><h3>CallbackBlob</h3>
779 <pre class="programlisting">typedef struct {
780   guint16 blob_type;  /* 2 */
781
782   guint16 deprecated : 1;
783   guint32 name;
784   guint32 signature;
785 } CallbackBlob;
786 </pre>
787 <div class="variablelist"><table border="0">
788 <col align="left" valign="top">
789 <tbody>
790 <tr>
791 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="CallbackBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
792 <td></td>
793 </tr>
794 <tr>
795 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="CallbackBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
796 <td></td>
797 </tr>
798 <tr>
799 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="CallbackBlob.name"></a>name</code></em>;</span></p></td>
800 <td></td>
801 </tr>
802 <tr>
803 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="CallbackBlob.signature"></a>signature</code></em>;</span></p></td>
804 <td>Offset of the <a class="link" href="gi-gtypelib.html#SignatureBlob" title="SignatureBlob"><span class="type">SignatureBlob</span></a> describing the parameter types and the
805 return value type.</td>
806 </tr>
807 </tbody>
808 </table></div>
809 </div>
810 <hr>
811 <div class="refsect2">
812 <a name="InterfaceTypeBlob"></a><h3>InterfaceTypeBlob</h3>
813 <pre class="programlisting">typedef struct {
814   guint8  pointer  :1;
815   guint8  tag      :5;
816   guint16 interface;
817 } InterfaceTypeBlob;
818 </pre>
819 <p>
820 If the interface is an enum of flags type, is_pointer is 0, otherwise it is 1.
821 </p>
822 <div class="variablelist"><table border="0">
823 <col align="left" valign="top">
824 <tbody>
825 <tr>
826 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="InterfaceTypeBlob.pointer"></a>pointer</code></em> :1;</span></p></td>
827 <td>Whether this type represents an indirection</td>
828 </tr>
829 <tr>
830 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="InterfaceTypeBlob.tag"></a>tag</code></em> :5;</span></p></td>
831 <td>A <a class="link" href="gi-GITypeInfo.html#GITypeTag" title="enum GITypeTag"><span class="type">GITypeTag</span></a>
832 </td>
833 </tr>
834 <tr>
835 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceTypeBlob.interface"></a>interface</code></em>;</span></p></td>
836 <td>Index of the directory entry for the interface.</td>
837 </tr>
838 </tbody>
839 </table></div>
840 </div>
841 <hr>
842 <div class="refsect2">
843 <a name="ParamTypeBlob"></a><h3>ParamTypeBlob</h3>
844 <pre class="programlisting">typedef struct {
845   guint8         pointer  :1;
846   guint8         reserved :2;
847   guint8         tag      :5;
848
849   guint8         reserved2;
850   guint16        n_types;
851
852   SimpleTypeBlob type[];
853 } ParamTypeBlob;
854 </pre>
855 <div class="variablelist"><table border="0">
856 <col align="left" valign="top">
857 <tbody>
858 <tr>
859 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="ParamTypeBlob.pointer"></a>pointer</code></em> :1;</span></p></td>
860 <td></td>
861 </tr>
862 <tr>
863 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="ParamTypeBlob.reserved"></a>reserved</code></em> :2;</span></p></td>
864 <td></td>
865 </tr>
866 <tr>
867 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="ParamTypeBlob.tag"></a>tag</code></em> :5;</span></p></td>
868 <td></td>
869 </tr>
870 <tr>
871 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="ParamTypeBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
872 <td></td>
873 </tr>
874 <tr>
875 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ParamTypeBlob.n-types"></a>n_types</code></em>;</span></p></td>
876 <td>The number of parameter types to follow.</td>
877 </tr>
878 <tr>
879 <td><p><span class="term"><span class="type">SimpleTypeBlob</span> <em class="structfield"><code><a name="ParamTypeBlob.type"></a>type</code></em>[];</span></p></td>
880 <td>Describes the type of the list elements.</td>
881 </tr>
882 </tbody>
883 </table></div>
884 </div>
885 <hr>
886 <div class="refsect2">
887 <a name="ErrorTypeBlob"></a><h3>ErrorTypeBlob</h3>
888 <pre class="programlisting">typedef struct {
889   guint8  pointer  :1;
890   guint8  reserved :2;
891   guint8  tag      :5;
892
893   guint8  reserved2;
894
895   guint16 n_domains; /* Must be 0 */
896   guint16 domains[];
897 } ErrorTypeBlob;
898 </pre>
899 </div>
900 <hr>
901 <div class="refsect2">
902 <a name="ValueBlob"></a><h3>ValueBlob</h3>
903 <pre class="programlisting">typedef struct {
904   guint32 deprecated : 1;
905   guint32 unsigned_value : 1;
906   guint32 name;
907   gint32 value;
908 } ValueBlob;
909 </pre>
910 <p>
911 Values commonly occur in enums and flags.
912 </p>
913 <div class="variablelist"><table border="0">
914 <col align="left" valign="top">
915 <tbody>
916 <tr>
917 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ValueBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
918 <td>Whether this value is deprecated</td>
919 </tr>
920 <tr>
921 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ValueBlob.unsigned-value"></a>unsigned_value</code></em> : 1;</span></p></td>
922 <td>if set, value is a 32-bit unsigned integer cast to gint32</td>
923 </tr>
924 <tr>
925 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ValueBlob.name"></a>name</code></em>;</span></p></td>
926 <td>Name of blob</td>
927 </tr>
928 <tr>
929 <td><p><span class="term"><span class="type">gint32</span> <em class="structfield"><code><a name="ValueBlob.value"></a>value</code></em>;</span></p></td>
930 <td>The numerical value</td>
931 </tr>
932 </tbody>
933 </table></div>
934 </div>
935 <hr>
936 <div class="refsect2">
937 <a name="FieldBlob"></a><h3>FieldBlob</h3>
938 <pre class="programlisting">typedef struct {
939   guint32        name;
940
941   guint8         readable :1;
942   guint8         writable :1;
943   guint8         has_embedded_type :1;
944   guint8         reserved :5;
945   guint8         bits;
946
947   guint16        struct_offset;
948
949   guint32        reserved2;
950
951   SimpleTypeBlob type;
952 } FieldBlob;
953 </pre>
954 <div class="variablelist"><table border="0">
955 <col align="left" valign="top">
956 <tbody>
957 <tr>
958 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="FieldBlob.name"></a>name</code></em>;</span></p></td>
959 <td>The name of the field.</td>
960 </tr>
961 <tr>
962 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="FieldBlob.readable"></a>readable</code></em> :1;</span></p></td>
963 <td></td>
964 </tr>
965 <tr>
966 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="FieldBlob.writable"></a>writable</code></em> :1;</span></p></td>
967 <td>How the field may be accessed.</td>
968 </tr>
969 <tr>
970 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="FieldBlob.has-embedded-type"></a>has_embedded_type</code></em> :1;</span></p></td>
971 <td>An anonymous type follows the FieldBlob.</td>
972 </tr>
973 <tr>
974 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="FieldBlob.reserved"></a>reserved</code></em> :5;</span></p></td>
975 <td></td>
976 </tr>
977 <tr>
978 <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="FieldBlob.bits"></a>bits</code></em>;</span></p></td>
979 <td>If this field is part of a bitfield, the number of bits which it
980 uses, otherwise 0.</td>
981 </tr>
982 <tr>
983 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="FieldBlob.struct-offset"></a>struct_offset</code></em>;</span></p></td>
984 <td>The offset of the field in the struct. The value 0xFFFF indicates
985 that the struct offset is unknown.</td>
986 </tr>
987 <tr>
988 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="FieldBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
989 <td></td>
990 </tr>
991 <tr>
992 <td><p><span class="term"><span class="type">SimpleTypeBlob</span> <em class="structfield"><code><a name="FieldBlob.type"></a>type</code></em>;</span></p></td>
993 <td>The type of the field.</td>
994 </tr>
995 </tbody>
996 </table></div>
997 </div>
998 <hr>
999 <div class="refsect2">
1000 <a name="RegisteredTypeBlob"></a><h3>RegisteredTypeBlob</h3>
1001 <pre class="programlisting">typedef struct {
1002   guint16 blob_type;
1003   guint16 deprecated   : 1;
1004   guint16 unregistered : 1;
1005   guint16 reserved :14;
1006   guint32 name;
1007
1008   guint32 gtype_name;
1009   guint32 gtype_init;
1010 } RegisteredTypeBlob;
1011 </pre>
1012 <div class="variablelist"><table border="0">
1013 <col align="left" valign="top">
1014 <tbody>
1015 <tr>
1016 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="RegisteredTypeBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
1017 <td></td>
1018 </tr>
1019 <tr>
1020 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="RegisteredTypeBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1021 <td></td>
1022 </tr>
1023 <tr>
1024 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="RegisteredTypeBlob.unregistered"></a>unregistered</code></em> : 1;</span></p></td>
1025 <td></td>
1026 </tr>
1027 <tr>
1028 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="RegisteredTypeBlob.reserved"></a>reserved</code></em> :14;</span></p></td>
1029 <td></td>
1030 </tr>
1031 <tr>
1032 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="RegisteredTypeBlob.name"></a>name</code></em>;</span></p></td>
1033 <td></td>
1034 </tr>
1035 <tr>
1036 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="RegisteredTypeBlob.gtype-name"></a>gtype_name</code></em>;</span></p></td>
1037 <td>The name under which the type is registered with GType.</td>
1038 </tr>
1039 <tr>
1040 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="RegisteredTypeBlob.gtype-init"></a>gtype_init</code></em>;</span></p></td>
1041 <td>The symbol name of the <code class="function">get_type()</code> function which registers the type.</td>
1042 </tr>
1043 </tbody>
1044 </table></div>
1045 </div>
1046 <hr>
1047 <div class="refsect2">
1048 <a name="StructBlob"></a><h3>StructBlob</h3>
1049 <pre class="programlisting">typedef struct {
1050   guint16   blob_type;
1051
1052   guint16   deprecated   : 1;
1053   guint16   unregistered : 1;
1054   guint16   is_gtype_struct : 1;
1055   guint16   alignment    : 6;
1056   guint16   foreign      : 1;
1057   guint16   reserved     : 6;
1058
1059   guint32   name;
1060
1061   guint32   gtype_name;
1062   guint32   gtype_init;
1063
1064   guint32   size;
1065
1066   guint16   n_fields;
1067   guint16   n_methods;
1068
1069   guint32   reserved2;
1070   guint32   reserved3;
1071
1072 #if 0
1073   /* variable-length parts of the blob */
1074   FieldBlob    fields[];
1075   FunctionBlob methods[];
1076 #endif
1077 } StructBlob;
1078 </pre>
1079 <div class="variablelist"><table border="0">
1080 <col align="left" valign="top">
1081 <tbody>
1082 <tr>
1083 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
1084 <td><a class="link" href="gi-gtypelib.html#BLOB-TYPE-STRUCT:CAPS"><span class="type">BLOB_TYPE_STRUCT</span></a></td>
1085 </tr>
1086 <tr>
1087 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1088 <td>Whether this structure is deprecated</td>
1089 </tr>
1090 <tr>
1091 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.unregistered"></a>unregistered</code></em> : 1;</span></p></td>
1092 <td>If this is set, the type is not registered with GType.</td>
1093 </tr>
1094 <tr>
1095 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.is-gtype-struct"></a>is_gtype_struct</code></em> : 1;</span></p></td>
1096 <td>Whether this structure is the class or interface layout for a GObject</td>
1097 </tr>
1098 <tr>
1099 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.alignment"></a>alignment</code></em> : 6;</span></p></td>
1100 <td>The byte boundary that the struct is aligned to in memory</td>
1101 </tr>
1102 <tr>
1103 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.foreign"></a>foreign</code></em> : 1;</span></p></td>
1104 <td>If the type is foreign, eg if it's expected to be overridden by
1105 a native language binding instead of relying of introspected bindings.</td>
1106 </tr>
1107 <tr>
1108 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.reserved"></a>reserved</code></em> : 6;</span></p></td>
1109 <td></td>
1110 </tr>
1111 <tr>
1112 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="StructBlob.name"></a>name</code></em>;</span></p></td>
1113 <td></td>
1114 </tr>
1115 <tr>
1116 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="StructBlob.gtype-name"></a>gtype_name</code></em>;</span></p></td>
1117 <td>String name of the associated <span class="type">GType</span>
1118 </td>
1119 </tr>
1120 <tr>
1121 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="StructBlob.gtype-init"></a>gtype_init</code></em>;</span></p></td>
1122 <td>String naming the symbol which gets the runtime <span class="type">GType</span>
1123 </td>
1124 </tr>
1125 <tr>
1126 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="StructBlob.size"></a>size</code></em>;</span></p></td>
1127 <td>The size of the struct in bytes.</td>
1128 </tr>
1129 <tr>
1130 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.n-fields"></a>n_fields</code></em>;</span></p></td>
1131 <td></td>
1132 </tr>
1133 <tr>
1134 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="StructBlob.n-methods"></a>n_methods</code></em>;</span></p></td>
1135 <td></td>
1136 </tr>
1137 <tr>
1138 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="StructBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
1139 <td></td>
1140 </tr>
1141 <tr>
1142 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="StructBlob.reserved3"></a>reserved3</code></em>;</span></p></td>
1143 <td></td>
1144 </tr>
1145 <tr>
1146 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#FieldBlob" title="FieldBlob"><span class="type">FieldBlob</span></a> <em class="structfield"><code><a name="StructBlob.fields"></a>fields</code></em>[];</span></p></td>
1147 <td>An array of n_fields FieldBlobs.
1148 should be considered as methods of the struct.</td>
1149 </tr>
1150 <tr>
1151 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#FunctionBlob" title="FunctionBlob"><span class="type">FunctionBlob</span></a> <em class="structfield"><code><a name="StructBlob.methods"></a>methods</code></em>[];</span></p></td>
1152 <td></td>
1153 </tr>
1154 </tbody>
1155 </table></div>
1156 </div>
1157 <hr>
1158 <div class="refsect2">
1159 <a name="UnionBlob"></a><h3>UnionBlob</h3>
1160 <pre class="programlisting">typedef struct {
1161   guint16      blob_type;
1162   guint16      deprecated    : 1;
1163   guint16      unregistered  : 1;
1164   guint16      discriminated : 1;
1165   guint16      alignment     : 6;
1166   guint16      reserved      : 7;
1167   guint32      name;
1168
1169   guint32      gtype_name;
1170   guint32      gtype_init;
1171
1172   guint32      size;
1173
1174   guint16      n_fields;
1175   guint16      n_functions;
1176
1177   guint32      reserved2;
1178   guint32      reserved3;
1179
1180   gint32       discriminator_offset;
1181   SimpleTypeBlob discriminator_type;
1182
1183 #if 0
1184   FieldBlob    fields[];
1185   FunctionBlob functions[];
1186   ConstantBlob discriminator_values[]
1187 #endif
1188 } UnionBlob;
1189 </pre>
1190 <div class="variablelist"><table border="0">
1191 <col align="left" valign="top">
1192 <tbody>
1193 <tr>
1194 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="UnionBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
1195 <td></td>
1196 </tr>
1197 <tr>
1198 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="UnionBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1199 <td></td>
1200 </tr>
1201 <tr>
1202 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="UnionBlob.unregistered"></a>unregistered</code></em> : 1;</span></p></td>
1203 <td>If this is set, the type is not registered with GType.</td>
1204 </tr>
1205 <tr>
1206 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="UnionBlob.discriminated"></a>discriminated</code></em> : 1;</span></p></td>
1207 <td>Is set if the union is discriminated</td>
1208 </tr>
1209 <tr>
1210 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="UnionBlob.alignment"></a>alignment</code></em> : 6;</span></p></td>
1211 <td>The byte boundary that the union is aligned to in memory</td>
1212 </tr>
1213 <tr>
1214 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="UnionBlob.reserved"></a>reserved</code></em> : 7;</span></p></td>
1215 <td></td>
1216 </tr>
1217 <tr>
1218 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="UnionBlob.name"></a>name</code></em>;</span></p></td>
1219 <td></td>
1220 </tr>
1221 <tr>
1222 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="UnionBlob.gtype-name"></a>gtype_name</code></em>;</span></p></td>
1223 <td>String name of the associated <span class="type">GType</span>
1224 </td>
1225 </tr>
1226 <tr>
1227 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="UnionBlob.gtype-init"></a>gtype_init</code></em>;</span></p></td>
1228 <td>String naming the symbol which gets the runtime <span class="type">GType</span>
1229 </td>
1230 </tr>
1231 <tr>
1232 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="UnionBlob.size"></a>size</code></em>;</span></p></td>
1233 <td>The size of the union in bytes.</td>
1234 </tr>
1235 <tr>
1236 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="UnionBlob.n-fields"></a>n_fields</code></em>;</span></p></td>
1237 <td>Length of the arrays</td>
1238 </tr>
1239 <tr>
1240 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="UnionBlob.n-functions"></a>n_functions</code></em>;</span></p></td>
1241 <td></td>
1242 </tr>
1243 <tr>
1244 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="UnionBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
1245 <td></td>
1246 </tr>
1247 <tr>
1248 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="UnionBlob.reserved3"></a>reserved3</code></em>;</span></p></td>
1249 <td></td>
1250 </tr>
1251 <tr>
1252 <td><p><span class="term"><span class="type">gint32</span> <em class="structfield"><code><a name="UnionBlob.discriminator-offset"></a>discriminator_offset</code></em>;</span></p></td>
1253 <td>Offset from the beginning of the union where the
1254 discriminator of a discriminated union is located.
1255 The value 0xFFFF indicates that the discriminator offset
1256 is unknown.</td>
1257 </tr>
1258 <tr>
1259 <td><p><span class="term"><span class="type">SimpleTypeBlob</span> <em class="structfield"><code><a name="UnionBlob.discriminator-type"></a>discriminator_type</code></em>;</span></p></td>
1260 <td>Type of the discriminator</td>
1261 </tr>
1262 <tr>
1263 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#FieldBlob" title="FieldBlob"><span class="type">FieldBlob</span></a> <em class="structfield"><code><a name="UnionBlob.fields"></a>fields</code></em>[];</span></p></td>
1264 <td>Array of FieldBlobs describing the alternative branches of the union</td>
1265 </tr>
1266 <tr>
1267 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#FunctionBlob" title="FunctionBlob"><span class="type">FunctionBlob</span></a> <em class="structfield"><code><a name="UnionBlob.functions"></a>functions</code></em>[];</span></p></td>
1268 <td></td>
1269 </tr>
1270 </tbody>
1271 </table></div>
1272 </div>
1273 <hr>
1274 <div class="refsect2">
1275 <a name="EnumBlob"></a><h3>EnumBlob</h3>
1276 <pre class="programlisting">typedef struct {
1277   guint16   blob_type;
1278
1279   guint16   deprecated   : 1;
1280   guint16   unregistered : 1;
1281   guint16   storage_type : 5;
1282   guint16   reserved     : 9;
1283
1284   guint32   name;
1285
1286   guint32   gtype_name;
1287   guint32   gtype_init;
1288
1289   guint16   n_values;
1290   guint16   n_methods;
1291
1292   guint32   error_domain;
1293
1294   ValueBlob values[];
1295 #if 0
1296   FunctionBlob methods[];
1297 #endif
1298 } EnumBlob;
1299 </pre>
1300 <div class="variablelist"><table border="0">
1301 <col align="left" valign="top">
1302 <tbody>
1303 <tr>
1304 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="EnumBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
1305 <td></td>
1306 </tr>
1307 <tr>
1308 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="EnumBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1309 <td></td>
1310 </tr>
1311 <tr>
1312 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="EnumBlob.unregistered"></a>unregistered</code></em> : 1;</span></p></td>
1313 <td>If this is set, the type is not registered with GType.</td>
1314 </tr>
1315 <tr>
1316 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="EnumBlob.storage-type"></a>storage_type</code></em> : 5;</span></p></td>
1317 <td>The tag of the type used for the enum in the C ABI
1318 (will be a signed or unsigned integral type)</td>
1319 </tr>
1320 <tr>
1321 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="EnumBlob.reserved"></a>reserved</code></em> : 9;</span></p></td>
1322 <td></td>
1323 </tr>
1324 <tr>
1325 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="EnumBlob.name"></a>name</code></em>;</span></p></td>
1326 <td></td>
1327 </tr>
1328 <tr>
1329 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="EnumBlob.gtype-name"></a>gtype_name</code></em>;</span></p></td>
1330 <td>String name of the associated <span class="type">GType</span>
1331 </td>
1332 </tr>
1333 <tr>
1334 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="EnumBlob.gtype-init"></a>gtype_init</code></em>;</span></p></td>
1335 <td>String naming the symbol which gets the runtime <span class="type">GType</span>
1336 </td>
1337 </tr>
1338 <tr>
1339 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="EnumBlob.n-values"></a>n_values</code></em>;</span></p></td>
1340 <td>The length of the values array.</td>
1341 </tr>
1342 <tr>
1343 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="EnumBlob.n-methods"></a>n_methods</code></em>;</span></p></td>
1344 <td>The length of the methods array.</td>
1345 </tr>
1346 <tr>
1347 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="EnumBlob.error-domain"></a>error_domain</code></em>;</span></p></td>
1348 <td>String naming the <span class="type">GError</span> domain this enum is
1349 associated with</td>
1350 </tr>
1351 <tr>
1352 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#ValueBlob" title="ValueBlob"><span class="type">ValueBlob</span></a> <em class="structfield"><code><a name="EnumBlob.values"></a>values</code></em>[];</span></p></td>
1353 <td>Describes the enum values.</td>
1354 </tr>
1355 <tr>
1356 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#FunctionBlob" title="FunctionBlob"><span class="type">FunctionBlob</span></a> <em class="structfield"><code><a name="EnumBlob.methods"></a>methods</code></em>[];</span></p></td>
1357 <td>Describes the enum methods.</td>
1358 </tr>
1359 </tbody>
1360 </table></div>
1361 </div>
1362 <hr>
1363 <div class="refsect2">
1364 <a name="PropertyBlob"></a><h3>PropertyBlob</h3>
1365 <pre class="programlisting">typedef struct {
1366   guint32        name;
1367
1368   guint32        deprecated                   : 1;
1369   guint32        readable                     : 1;
1370   guint32        writable                     : 1;
1371   guint32        construct                    : 1;
1372   guint32        construct_only               : 1;
1373   guint32        transfer_ownership           : 1;
1374   guint32        transfer_container_ownership : 1;
1375   guint32        reserved                     :25;
1376
1377   guint32        reserved2;
1378
1379   SimpleTypeBlob type;
1380 } PropertyBlob;
1381 </pre>
1382 <div class="variablelist"><table border="0">
1383 <col align="left" valign="top">
1384 <tbody>
1385 <tr>
1386 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.name"></a>name</code></em>;</span></p></td>
1387 <td>The name of the property.</td>
1388 </tr>
1389 <tr>
1390 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1391 <td></td>
1392 </tr>
1393 <tr>
1394 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.readable"></a>readable</code></em> : 1;</span></p></td>
1395 <td></td>
1396 </tr>
1397 <tr>
1398 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.writable"></a>writable</code></em> : 1;</span></p></td>
1399 <td></td>
1400 </tr>
1401 <tr>
1402 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.construct"></a>construct</code></em> : 1;</span></p></td>
1403 <td></td>
1404 </tr>
1405 <tr>
1406 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.construct-only"></a>construct_only</code></em> : 1;</span></p></td>
1407 <td>The ParamFlags used when registering the property.</td>
1408 </tr>
1409 <tr>
1410 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.transfer-ownership"></a>transfer_ownership</code></em> : 1;</span></p></td>
1411 <td>When writing, the type containing the property takes
1412 ownership of the value. When reading, the returned value needs to be released
1413 by the caller.</td>
1414 </tr>
1415 <tr>
1416 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.transfer-container-ownership"></a>transfer_container_ownership</code></em> : 1;</span></p></td>
1417 <td>For container types indicates that the
1418 ownership of the container, but not of its contents, is transferred. This is
1419 typically the case when reading lists of statically allocated things.</td>
1420 </tr>
1421 <tr>
1422 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.reserved"></a>reserved</code></em> :25;</span></p></td>
1423 <td></td>
1424 </tr>
1425 <tr>
1426 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="PropertyBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
1427 <td></td>
1428 </tr>
1429 <tr>
1430 <td><p><span class="term"><span class="type">SimpleTypeBlob</span> <em class="structfield"><code><a name="PropertyBlob.type"></a>type</code></em>;</span></p></td>
1431 <td>Describes the type of the property.</td>
1432 </tr>
1433 </tbody>
1434 </table></div>
1435 </div>
1436 <hr>
1437 <div class="refsect2">
1438 <a name="SignalBlob"></a><h3>SignalBlob</h3>
1439 <pre class="programlisting">typedef struct {
1440   guint16 deprecated        : 1;
1441   guint16 run_first         : 1;
1442   guint16 run_last          : 1;
1443   guint16 run_cleanup       : 1;
1444   guint16 no_recurse        : 1;
1445   guint16 detailed          : 1;
1446   guint16 action            : 1;
1447   guint16 no_hooks          : 1;
1448   guint16 has_class_closure : 1;
1449   guint16 true_stops_emit   : 1;
1450   guint16 reserved          : 6;
1451
1452   guint16 class_closure;
1453
1454   guint32 name;
1455
1456   guint32 reserved2;
1457
1458   guint32 signature;
1459 } SignalBlob;
1460 </pre>
1461 <div class="variablelist"><table border="0">
1462 <col align="left" valign="top">
1463 <tbody>
1464 <tr>
1465 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1466 <td></td>
1467 </tr>
1468 <tr>
1469 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.run-first"></a>run_first</code></em> : 1;</span></p></td>
1470 <td></td>
1471 </tr>
1472 <tr>
1473 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.run-last"></a>run_last</code></em> : 1;</span></p></td>
1474 <td></td>
1475 </tr>
1476 <tr>
1477 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.run-cleanup"></a>run_cleanup</code></em> : 1;</span></p></td>
1478 <td></td>
1479 </tr>
1480 <tr>
1481 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.no-recurse"></a>no_recurse</code></em> : 1;</span></p></td>
1482 <td></td>
1483 </tr>
1484 <tr>
1485 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.detailed"></a>detailed</code></em> : 1;</span></p></td>
1486 <td></td>
1487 </tr>
1488 <tr>
1489 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.action"></a>action</code></em> : 1;</span></p></td>
1490 <td></td>
1491 </tr>
1492 <tr>
1493 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.no-hooks"></a>no_hooks</code></em> : 1;</span></p></td>
1494 <td>The flags used when registering the signal.</td>
1495 </tr>
1496 <tr>
1497 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.has-class-closure"></a>has_class_closure</code></em> : 1;</span></p></td>
1498 <td>Set if the signal has a class closure.</td>
1499 </tr>
1500 <tr>
1501 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.true-stops-emit"></a>true_stops_emit</code></em> : 1;</span></p></td>
1502 <td>Whether the signal has true-stops-emit semantics</td>
1503 </tr>
1504 <tr>
1505 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.reserved"></a>reserved</code></em> : 6;</span></p></td>
1506 <td></td>
1507 </tr>
1508 <tr>
1509 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="SignalBlob.class-closure"></a>class_closure</code></em>;</span></p></td>
1510 <td>The index of the class closure in the list of virtual functions
1511 of the object or interface on which the signal is defined.</td>
1512 </tr>
1513 <tr>
1514 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="SignalBlob.name"></a>name</code></em>;</span></p></td>
1515 <td>The name of the signal.</td>
1516 </tr>
1517 <tr>
1518 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="SignalBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
1519 <td></td>
1520 </tr>
1521 <tr>
1522 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="SignalBlob.signature"></a>signature</code></em>;</span></p></td>
1523 <td>Offset of the SignatureBlob describing the parameter types and the
1524 return value type.</td>
1525 </tr>
1526 </tbody>
1527 </table></div>
1528 </div>
1529 <hr>
1530 <div class="refsect2">
1531 <a name="VFuncBlob"></a><h3>VFuncBlob</h3>
1532 <pre class="programlisting">typedef struct {
1533   guint32 name;
1534
1535   guint16 must_chain_up           : 1;
1536   guint16 must_be_implemented     : 1;
1537   guint16 must_not_be_implemented : 1;
1538   guint16 class_closure           : 1;
1539   guint16 throws                  : 1;
1540   guint16 reserved                :11;
1541   guint16 signal;
1542
1543   guint16 struct_offset;
1544   guint16 invoker : 10; /* Number of bits matches @index in FunctionBlob */
1545   guint16 reserved2 : 6;
1546
1547   guint32 reserved3;
1548   guint32 signature;
1549 } VFuncBlob;
1550 </pre>
1551 <div class="variablelist"><table border="0">
1552 <col align="left" valign="top">
1553 <tbody>
1554 <tr>
1555 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="VFuncBlob.name"></a>name</code></em>;</span></p></td>
1556 <td>The name of the virtual function.</td>
1557 </tr>
1558 <tr>
1559 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.must-chain-up"></a>must_chain_up</code></em> : 1;</span></p></td>
1560 <td>If set, every implementation of this virtual function must
1561 chain up to the implementation of the parent class.</td>
1562 </tr>
1563 <tr>
1564 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.must-be-implemented"></a>must_be_implemented</code></em> : 1;</span></p></td>
1565 <td>If set, every derived class must override this virtual function.</td>
1566 </tr>
1567 <tr>
1568 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.must-not-be-implemented"></a>must_not_be_implemented</code></em> : 1;</span></p></td>
1569 <td>If set, derived class must not override this virtual function.</td>
1570 </tr>
1571 <tr>
1572 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.class-closure"></a>class_closure</code></em> : 1;</span></p></td>
1573 <td>Set if this virtual function is the class closure of a signal.</td>
1574 </tr>
1575 <tr>
1576 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.throws"></a>throws</code></em> : 1;</span></p></td>
1577 <td></td>
1578 </tr>
1579 <tr>
1580 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.reserved"></a>reserved</code></em> :11;</span></p></td>
1581 <td></td>
1582 </tr>
1583 <tr>
1584 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.signal"></a>signal</code></em>;</span></p></td>
1585 <td>The index of the signal in the list of signals of the object or
1586 interface to which this virtual function belongs.</td>
1587 </tr>
1588 <tr>
1589 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.struct-offset"></a>struct_offset</code></em>;</span></p></td>
1590 <td>The offset of the function pointer in the class struct. The value
1591 0xFFFF indicates that the struct offset is unknown.</td>
1592 </tr>
1593 <tr>
1594 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.invoker"></a>invoker</code></em> : 10;</span></p></td>
1595 <td>If a method invoker for this virtual exists, this is the offset in the
1596 class structure of the method.  If no method is known, this value will be 0x3ff.</td>
1597 </tr>
1598 <tr>
1599 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="VFuncBlob.reserved2"></a>reserved2</code></em> : 6;</span></p></td>
1600 <td></td>
1601 </tr>
1602 <tr>
1603 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="VFuncBlob.reserved3"></a>reserved3</code></em>;</span></p></td>
1604 <td></td>
1605 </tr>
1606 <tr>
1607 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="VFuncBlob.signature"></a>signature</code></em>;</span></p></td>
1608 <td>Offset of the SignatureBlob describing the parameter types and the
1609 return value type.</td>
1610 </tr>
1611 </tbody>
1612 </table></div>
1613 </div>
1614 <hr>
1615 <div class="refsect2">
1616 <a name="ObjectBlob"></a><h3>ObjectBlob</h3>
1617 <pre class="programlisting">typedef struct {
1618   guint16   blob_type;  /* 7 */
1619   guint16   deprecated   : 1;
1620   guint16   abstract     : 1;
1621   guint16   fundamental  : 1;
1622   guint16   reserved     :13;
1623   guint32   name;
1624
1625   guint32   gtype_name;
1626   guint32   gtype_init;
1627
1628   guint16   parent;
1629   guint16   gtype_struct;
1630
1631   guint16   n_interfaces;
1632   guint16   n_fields;
1633   guint16   n_properties;
1634   guint16   n_methods;
1635   guint16   n_signals;
1636   guint16   n_vfuncs;
1637   guint16   n_constants;
1638   guint16   reserved2;
1639
1640   guint32   ref_func;
1641   guint32   unref_func;
1642   guint32   set_value_func;
1643   guint32   get_value_func;
1644
1645   guint32   reserved3;
1646   guint32   reserved4;
1647
1648   guint16   interfaces[];
1649
1650 #if 0
1651   /* variable-length parts of the blob */
1652   FieldBlob           fields[];
1653   PropertyBlob        properties[];
1654   FunctionBlob        methods[];
1655   SignalBlob          signals[];
1656   VFuncBlob           vfuncs[];
1657   ConstantBlob        constants[];
1658 #endif
1659 } ObjectBlob;
1660 </pre>
1661 <div class="variablelist"><table border="0">
1662 <col align="left" valign="top">
1663 <tbody>
1664 <tr>
1665 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
1666 <td><a class="link" href="gi-gtypelib.html#BLOB-TYPE-OBJECT:CAPS"><span class="type">BLOB_TYPE_OBJECT</span></a></td>
1667 </tr>
1668 <tr>
1669 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1670 <td></td>
1671 </tr>
1672 <tr>
1673 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.abstract"></a>abstract</code></em> : 1;</span></p></td>
1674 <td></td>
1675 </tr>
1676 <tr>
1677 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.fundamental"></a>fundamental</code></em> : 1;</span></p></td>
1678 <td>this object is not a GObject derived type, instead it's
1679 an additional fundamental type.</td>
1680 </tr>
1681 <tr>
1682 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.reserved"></a>reserved</code></em> :13;</span></p></td>
1683 <td></td>
1684 </tr>
1685 <tr>
1686 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.name"></a>name</code></em>;</span></p></td>
1687 <td></td>
1688 </tr>
1689 <tr>
1690 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.gtype-name"></a>gtype_name</code></em>;</span></p></td>
1691 <td>String name of the associated <span class="type">GType</span>
1692 </td>
1693 </tr>
1694 <tr>
1695 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.gtype-init"></a>gtype_init</code></em>;</span></p></td>
1696 <td>String naming the symbol which gets the runtime <span class="type">GType</span>
1697 </td>
1698 </tr>
1699 <tr>
1700 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.parent"></a>parent</code></em>;</span></p></td>
1701 <td>The directory index of the parent type. This is only set for
1702 objects. If an object does not have a parent, it is zero.</td>
1703 </tr>
1704 <tr>
1705 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.gtype-struct"></a>gtype_struct</code></em>;</span></p></td>
1706 <td></td>
1707 </tr>
1708 <tr>
1709 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.n-interfaces"></a>n_interfaces</code></em>;</span></p></td>
1710 <td></td>
1711 </tr>
1712 <tr>
1713 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.n-fields"></a>n_fields</code></em>;</span></p></td>
1714 <td></td>
1715 </tr>
1716 <tr>
1717 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.n-properties"></a>n_properties</code></em>;</span></p></td>
1718 <td></td>
1719 </tr>
1720 <tr>
1721 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.n-methods"></a>n_methods</code></em>;</span></p></td>
1722 <td></td>
1723 </tr>
1724 <tr>
1725 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.n-signals"></a>n_signals</code></em>;</span></p></td>
1726 <td></td>
1727 </tr>
1728 <tr>
1729 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.n-vfuncs"></a>n_vfuncs</code></em>;</span></p></td>
1730 <td></td>
1731 </tr>
1732 <tr>
1733 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.n-constants"></a>n_constants</code></em>;</span></p></td>
1734 <td>The lengths of the arrays.Up to 16bits of padding may be inserted
1735 between the arrays to ensure that they start on a 32bit boundary.</td>
1736 </tr>
1737 <tr>
1738 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
1739 <td></td>
1740 </tr>
1741 <tr>
1742 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.ref-func"></a>ref_func</code></em>;</span></p></td>
1743 <td>String pointing to a function which can be called to increase
1744 the reference count for an instance of this object type.</td>
1745 </tr>
1746 <tr>
1747 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.unref-func"></a>unref_func</code></em>;</span></p></td>
1748 <td>String pointing to a function which can be called to decrease
1749 the reference count for an instance of this object type.</td>
1750 </tr>
1751 <tr>
1752 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.set-value-func"></a>set_value_func</code></em>;</span></p></td>
1753 <td>String pointing to a function which can be called to
1754 convert a pointer of this object to a GValue</td>
1755 </tr>
1756 <tr>
1757 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.get-value-func"></a>get_value_func</code></em>;</span></p></td>
1758 <td>String pointing to a function which can be called to
1759 convert extract a pointer to this object from a GValue</td>
1760 </tr>
1761 <tr>
1762 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.reserved3"></a>reserved3</code></em>;</span></p></td>
1763 <td></td>
1764 </tr>
1765 <tr>
1766 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ObjectBlob.reserved4"></a>reserved4</code></em>;</span></p></td>
1767 <td></td>
1768 </tr>
1769 <tr>
1770 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ObjectBlob.interfaces"></a>interfaces</code></em>[];</span></p></td>
1771 <td>An array of indices of directory entries for the implemented
1772 interfaces.</td>
1773 </tr>
1774 <tr>
1775 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#FieldBlob" title="FieldBlob"><span class="type">FieldBlob</span></a> <em class="structfield"><code><a name="ObjectBlob.fields"></a>fields</code></em>[];</span></p></td>
1776 <td>Describes the fields.</td>
1777 </tr>
1778 <tr>
1779 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#PropertyBlob" title="PropertyBlob"><span class="type">PropertyBlob</span></a> <em class="structfield"><code><a name="ObjectBlob.properties"></a>properties</code></em>[];</span></p></td>
1780 <td>Describes the properties.</td>
1781 </tr>
1782 <tr>
1783 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#FunctionBlob" title="FunctionBlob"><span class="type">FunctionBlob</span></a> <em class="structfield"><code><a name="ObjectBlob.methods"></a>methods</code></em>[];</span></p></td>
1784 <td>Describes the methods, constructors, setters and getters.</td>
1785 </tr>
1786 <tr>
1787 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#SignalBlob" title="SignalBlob"><span class="type">SignalBlob</span></a> <em class="structfield"><code><a name="ObjectBlob.signals"></a>signals</code></em>[];</span></p></td>
1788 <td>Describes the signals.</td>
1789 </tr>
1790 <tr>
1791 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#VFuncBlob" title="VFuncBlob"><span class="type">VFuncBlob</span></a> <em class="structfield"><code><a name="ObjectBlob.vfuncs"></a>vfuncs</code></em>[];</span></p></td>
1792 <td>Describes the virtual functions.</td>
1793 </tr>
1794 <tr>
1795 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#ConstantBlob" title="ConstantBlob"><span class="type">ConstantBlob</span></a> <em class="structfield"><code><a name="ObjectBlob.constants"></a>constants</code></em>[];</span></p></td>
1796 <td>Describes the constants.</td>
1797 </tr>
1798 </tbody>
1799 </table></div>
1800 </div>
1801 <hr>
1802 <div class="refsect2">
1803 <a name="InterfaceBlob"></a><h3>InterfaceBlob</h3>
1804 <pre class="programlisting">typedef struct {
1805   guint16 blob_type;
1806   guint16 deprecated   : 1;
1807   guint16 reserved     :15;
1808   guint32 name;
1809
1810   guint32 gtype_name;
1811   guint32 gtype_init;
1812   guint16 gtype_struct;
1813
1814   guint16 n_prerequisites;
1815   guint16 n_properties;
1816   guint16 n_methods;
1817   guint16 n_signals;
1818   guint16 n_vfuncs;
1819   guint16 n_constants;
1820
1821   guint16 padding;
1822
1823   guint32 reserved2;
1824   guint32 reserved3;
1825
1826   guint16 prerequisites[];
1827
1828 #if 0
1829   /* variable-length parts of the blob */
1830   PropertyBlob        properties[];
1831   FunctionBlob        methods[];
1832   SignalBlob          signals[];
1833   VFuncBlob           vfuncs[];
1834   ConstantBlob        constants[];
1835 #endif
1836 } InterfaceBlob;
1837 </pre>
1838 <div class="variablelist"><table border="0">
1839 <col align="left" valign="top">
1840 <tbody>
1841 <tr>
1842 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
1843 <td></td>
1844 </tr>
1845 <tr>
1846 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1847 <td></td>
1848 </tr>
1849 <tr>
1850 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.reserved"></a>reserved</code></em> :15;</span></p></td>
1851 <td></td>
1852 </tr>
1853 <tr>
1854 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="InterfaceBlob.name"></a>name</code></em>;</span></p></td>
1855 <td></td>
1856 </tr>
1857 <tr>
1858 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="InterfaceBlob.gtype-name"></a>gtype_name</code></em>;</span></p></td>
1859 <td></td>
1860 </tr>
1861 <tr>
1862 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="InterfaceBlob.gtype-init"></a>gtype_init</code></em>;</span></p></td>
1863 <td></td>
1864 </tr>
1865 <tr>
1866 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.gtype-struct"></a>gtype_struct</code></em>;</span></p></td>
1867 <td>Name of the interface "class" C structure</td>
1868 </tr>
1869 <tr>
1870 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.n-prerequisites"></a>n_prerequisites</code></em>;</span></p></td>
1871 <td>Number of prerequisites</td>
1872 </tr>
1873 <tr>
1874 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.n-properties"></a>n_properties</code></em>;</span></p></td>
1875 <td>Number of properties</td>
1876 </tr>
1877 <tr>
1878 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.n-methods"></a>n_methods</code></em>;</span></p></td>
1879 <td>Number of methods</td>
1880 </tr>
1881 <tr>
1882 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.n-signals"></a>n_signals</code></em>;</span></p></td>
1883 <td>Number of signals</td>
1884 </tr>
1885 <tr>
1886 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.n-vfuncs"></a>n_vfuncs</code></em>;</span></p></td>
1887 <td>Number of virtual functions</td>
1888 </tr>
1889 <tr>
1890 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.n-constants"></a>n_constants</code></em>;</span></p></td>
1891 <td>The lengths of the arrays.
1892 Up to 16bits of padding may be inserted between the arrays to ensure that they
1893 start on a 32bit boundary.</td>
1894 </tr>
1895 <tr>
1896 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.padding"></a>padding</code></em>;</span></p></td>
1897 <td></td>
1898 </tr>
1899 <tr>
1900 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="InterfaceBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
1901 <td></td>
1902 </tr>
1903 <tr>
1904 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="InterfaceBlob.reserved3"></a>reserved3</code></em>;</span></p></td>
1905 <td></td>
1906 </tr>
1907 <tr>
1908 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="InterfaceBlob.prerequisites"></a>prerequisites</code></em>[];</span></p></td>
1909 <td>An array of indices of directory entries for required interfaces.</td>
1910 </tr>
1911 <tr>
1912 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#PropertyBlob" title="PropertyBlob"><span class="type">PropertyBlob</span></a> <em class="structfield"><code><a name="InterfaceBlob.properties"></a>properties</code></em>[];</span></p></td>
1913 <td>Describes the properties.</td>
1914 </tr>
1915 <tr>
1916 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#FunctionBlob" title="FunctionBlob"><span class="type">FunctionBlob</span></a> <em class="structfield"><code><a name="InterfaceBlob.methods"></a>methods</code></em>[];</span></p></td>
1917 <td>Describes the methods, constructors, setters and getters.</td>
1918 </tr>
1919 <tr>
1920 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#SignalBlob" title="SignalBlob"><span class="type">SignalBlob</span></a> <em class="structfield"><code><a name="InterfaceBlob.signals"></a>signals</code></em>[];</span></p></td>
1921 <td>Describes the signals.</td>
1922 </tr>
1923 <tr>
1924 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#VFuncBlob" title="VFuncBlob"><span class="type">VFuncBlob</span></a> <em class="structfield"><code><a name="InterfaceBlob.vfuncs"></a>vfuncs</code></em>[];</span></p></td>
1925 <td>Describes the virtual functions.</td>
1926 </tr>
1927 <tr>
1928 <td><p><span class="term"><a class="link" href="gi-gtypelib.html#ConstantBlob" title="ConstantBlob"><span class="type">ConstantBlob</span></a> <em class="structfield"><code><a name="InterfaceBlob.constants"></a>constants</code></em>[];</span></p></td>
1929 <td>Describes the constants.</td>
1930 </tr>
1931 </tbody>
1932 </table></div>
1933 </div>
1934 <hr>
1935 <div class="refsect2">
1936 <a name="ConstantBlob"></a><h3>ConstantBlob</h3>
1937 <pre class="programlisting">typedef struct {
1938   guint16        blob_type;
1939   guint16        deprecated   : 1;
1940   guint16        reserved     :15;
1941   guint32        name;
1942
1943   SimpleTypeBlob type;
1944
1945   guint32        size;
1946   guint32        offset;
1947
1948   guint32        reserved2;
1949 } ConstantBlob;
1950 </pre>
1951 <div class="variablelist"><table border="0">
1952 <col align="left" valign="top">
1953 <tbody>
1954 <tr>
1955 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ConstantBlob.blob-type"></a>blob_type</code></em>;</span></p></td>
1956 <td></td>
1957 </tr>
1958 <tr>
1959 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ConstantBlob.deprecated"></a>deprecated</code></em> : 1;</span></p></td>
1960 <td></td>
1961 </tr>
1962 <tr>
1963 <td><p><span class="term"><span class="type">guint16</span> <em class="structfield"><code><a name="ConstantBlob.reserved"></a>reserved</code></em> :15;</span></p></td>
1964 <td></td>
1965 </tr>
1966 <tr>
1967 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ConstantBlob.name"></a>name</code></em>;</span></p></td>
1968 <td></td>
1969 </tr>
1970 <tr>
1971 <td><p><span class="term"><span class="type">SimpleTypeBlob</span> <em class="structfield"><code><a name="ConstantBlob.type"></a>type</code></em>;</span></p></td>
1972 <td>The type of the value. In most cases this should be a numeric
1973 type or string.</td>
1974 </tr>
1975 <tr>
1976 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ConstantBlob.size"></a>size</code></em>;</span></p></td>
1977 <td>The size of the value in bytes.</td>
1978 </tr>
1979 <tr>
1980 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ConstantBlob.offset"></a>offset</code></em>;</span></p></td>
1981 <td>The offset of the value in the typelib.</td>
1982 </tr>
1983 <tr>
1984 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="ConstantBlob.reserved2"></a>reserved2</code></em>;</span></p></td>
1985 <td></td>
1986 </tr>
1987 </tbody>
1988 </table></div>
1989 </div>
1990 <hr>
1991 <div class="refsect2">
1992 <a name="AttributeBlob"></a><h3>AttributeBlob</h3>
1993 <pre class="programlisting">typedef struct {
1994   guint32 offset;
1995   guint32 name;
1996   guint32 value;
1997 } AttributeBlob;
1998 </pre>
1999 <div class="variablelist"><table border="0">
2000 <col align="left" valign="top">
2001 <tbody>
2002 <tr>
2003 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="AttributeBlob.offset"></a>offset</code></em>;</span></p></td>
2004 <td>The offset of the typelib entry to which this attribute refers.
2005 Attributes are kept sorted by offset, so that the attributes
2006 of an entry can be found by a binary search.</td>
2007 </tr>
2008 <tr>
2009 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="AttributeBlob.name"></a>name</code></em>;</span></p></td>
2010 <td>The name of the attribute, a string.</td>
2011 </tr>
2012 <tr>
2013 <td><p><span class="term"><span class="type">guint32</span> <em class="structfield"><code><a name="AttributeBlob.value"></a>value</code></em>;</span></p></td>
2014 <td>The value of the attribute (also a string)</td>
2015 </tr>
2016 </tbody>
2017 </table></div>
2018 </div>
2019 <hr>
2020 <div class="refsect2">
2021 <a name="g-typelib-get-dir-entry"></a><h3>g_typelib_get_dir_entry ()</h3>
2022 <pre class="programlisting"><a class="link" href="gi-gtypelib.html#DirEntry" title="DirEntry"><span class="returnvalue">DirEntry</span></a> *          g_typelib_get_dir_entry             (<em class="parameter"><code><a class="link" href="gi-girepository.html#GITypelib" title="GITypelib"><span class="type">GITypelib</span></a> *typelib</code></em>,
2023                                                          <em class="parameter"><code><span class="type">guint16</span> index</code></em>);</pre>
2024 </div>
2025 <hr>
2026 <div class="refsect2">
2027 <a name="g-typelib-check-sanity"></a><h3>g_typelib_check_sanity ()</h3>
2028 <pre class="programlisting"><span class="returnvalue">void</span>                g_typelib_check_sanity              (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
2029 </div>
2030 <hr>
2031 <div class="refsect2">
2032 <a name="g-typelib-get-string"></a><h3>g_typelib_get_string()</h3>
2033 <pre class="programlisting">#define             g_typelib_get_string(typelib,offset)</pre>
2034 </div>
2035 <hr>
2036 <div class="refsect2">
2037 <a name="G-TYPELIB-ERROR:CAPS"></a><h3>G_TYPELIB_ERROR</h3>
2038 <pre class="programlisting">#define G_TYPELIB_ERROR (g_typelib_error_quark ())
2039 </pre>
2040 </div>
2041 <hr>
2042 <div class="refsect2">
2043 <a name="g-typelib-validate"></a><h3>g_typelib_validate ()</h3>
2044 <pre class="programlisting"><span class="returnvalue">gboolean</span>            g_typelib_validate                  (<em class="parameter"><code><a class="link" href="gi-girepository.html#GITypelib" title="GITypelib"><span class="type">GITypelib</span></a> *typelib</code></em>,
2045                                                          <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
2046 </div>
2047 <hr>
2048 <div class="refsect2">
2049 <a name="BLOB-IS-REGISTERED-TYPE:CAPS"></a><h3>BLOB_IS_REGISTERED_TYPE()</h3>
2050 <pre class="programlisting">#define             BLOB_IS_REGISTERED_TYPE(blob)</pre>
2051 </div>
2052 </div>
2053 </div>
2054 <div class="footer">
2055 <hr>
2056           Generated by GTK-Doc V1.18.1</div>
2057 </body>
2058 </html>