1 | /* |
2 | * Copyright © 2007, 2008 Ryan Lortie |
3 | * Copyright © 2009, 2010 Codethink Limited |
4 | * |
5 | * This library is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU Lesser General Public |
7 | * License as published by the Free Software Foundation; either |
8 | * version 2.1 of the License, or (at your option) any later version. |
9 | * |
10 | * This library is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | * Lesser General Public License for more details. |
14 | * |
15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this library; if not, see <http://www.gnu.org/licenses/>. |
17 | * |
18 | * Author: Ryan Lortie <desrt@desrt.ca> |
19 | */ |
20 | |
21 | #ifndef __G_VARIANT_TYPE_H__ |
22 | #define __G_VARIANT_TYPE_H__ |
23 | |
24 | #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION) |
25 | #error "Only <glib.h> can be included directly." |
26 | #endif |
27 | |
28 | #include <glib/gtypes.h> |
29 | |
30 | G_BEGIN_DECLS |
31 | |
32 | /** |
33 | * GVariantType: |
34 | * |
35 | * A type in the GVariant type system. |
36 | * |
37 | * Two types may not be compared by value; use g_variant_type_equal() or |
38 | * g_variant_type_is_subtype_of(). May be copied using |
39 | * g_variant_type_copy() and freed using g_variant_type_free(). |
40 | **/ |
41 | typedef struct _GVariantType GVariantType; |
42 | |
43 | /** |
44 | * G_VARIANT_TYPE_BOOLEAN: |
45 | * |
46 | * The type of a value that can be either %TRUE or %FALSE. |
47 | **/ |
48 | #define G_VARIANT_TYPE_BOOLEAN ((const GVariantType *) "b") |
49 | |
50 | /** |
51 | * G_VARIANT_TYPE_BYTE: |
52 | * |
53 | * The type of an integer value that can range from 0 to 255. |
54 | **/ |
55 | #define G_VARIANT_TYPE_BYTE ((const GVariantType *) "y") |
56 | |
57 | /** |
58 | * G_VARIANT_TYPE_INT16: |
59 | * |
60 | * The type of an integer value that can range from -32768 to 32767. |
61 | **/ |
62 | #define G_VARIANT_TYPE_INT16 ((const GVariantType *) "n") |
63 | |
64 | /** |
65 | * G_VARIANT_TYPE_UINT16: |
66 | * |
67 | * The type of an integer value that can range from 0 to 65535. |
68 | * There were about this many people living in Toronto in the 1870s. |
69 | **/ |
70 | #define G_VARIANT_TYPE_UINT16 ((const GVariantType *) "q") |
71 | |
72 | /** |
73 | * G_VARIANT_TYPE_INT32: |
74 | * |
75 | * The type of an integer value that can range from -2147483648 to |
76 | * 2147483647. |
77 | **/ |
78 | #define G_VARIANT_TYPE_INT32 ((const GVariantType *) "i") |
79 | |
80 | /** |
81 | * G_VARIANT_TYPE_UINT32: |
82 | * |
83 | * The type of an integer value that can range from 0 to 4294967295. |
84 | * That's one number for everyone who was around in the late 1970s. |
85 | **/ |
86 | #define G_VARIANT_TYPE_UINT32 ((const GVariantType *) "u") |
87 | |
88 | /** |
89 | * G_VARIANT_TYPE_INT64: |
90 | * |
91 | * The type of an integer value that can range from |
92 | * -9223372036854775808 to 9223372036854775807. |
93 | **/ |
94 | #define G_VARIANT_TYPE_INT64 ((const GVariantType *) "x") |
95 | |
96 | /** |
97 | * G_VARIANT_TYPE_UINT64: |
98 | * |
99 | * The type of an integer value that can range from 0 |
100 | * to 18446744073709551615 (inclusive). That's a really big number, |
101 | * but a Rubik's cube can have a bit more than twice as many possible |
102 | * positions. |
103 | **/ |
104 | #define G_VARIANT_TYPE_UINT64 ((const GVariantType *) "t") |
105 | |
106 | /** |
107 | * G_VARIANT_TYPE_DOUBLE: |
108 | * |
109 | * The type of a double precision IEEE754 floating point number. |
110 | * These guys go up to about 1.80e308 (plus and minus) but miss out on |
111 | * some numbers in between. In any case, that's far greater than the |
112 | * estimated number of fundamental particles in the observable |
113 | * universe. |
114 | **/ |
115 | #define G_VARIANT_TYPE_DOUBLE ((const GVariantType *) "d") |
116 | |
117 | /** |
118 | * G_VARIANT_TYPE_STRING: |
119 | * |
120 | * The type of a string. "" is a string. %NULL is not a string. |
121 | **/ |
122 | #define G_VARIANT_TYPE_STRING ((const GVariantType *) "s") |
123 | |
124 | /** |
125 | * G_VARIANT_TYPE_OBJECT_PATH: |
126 | * |
127 | * The type of a D-Bus object reference. These are strings of a |
128 | * specific format used to identify objects at a given destination on |
129 | * the bus. |
130 | * |
131 | * If you are not interacting with D-Bus, then there is no reason to make |
132 | * use of this type. If you are, then the D-Bus specification contains a |
133 | * precise description of valid object paths. |
134 | **/ |
135 | #define G_VARIANT_TYPE_OBJECT_PATH ((const GVariantType *) "o") |
136 | |
137 | /** |
138 | * G_VARIANT_TYPE_SIGNATURE: |
139 | * |
140 | * The type of a D-Bus type signature. These are strings of a specific |
141 | * format used as type signatures for D-Bus methods and messages. |
142 | * |
143 | * If you are not interacting with D-Bus, then there is no reason to make |
144 | * use of this type. If you are, then the D-Bus specification contains a |
145 | * precise description of valid signature strings. |
146 | **/ |
147 | #define G_VARIANT_TYPE_SIGNATURE ((const GVariantType *) "g") |
148 | |
149 | /** |
150 | * G_VARIANT_TYPE_VARIANT: |
151 | * |
152 | * The type of a box that contains any other value (including another |
153 | * variant). |
154 | **/ |
155 | #define G_VARIANT_TYPE_VARIANT ((const GVariantType *) "v") |
156 | |
157 | /** |
158 | * G_VARIANT_TYPE_HANDLE: |
159 | * |
160 | * The type of a 32bit signed integer value, that by convention, is used |
161 | * as an index into an array of file descriptors that are sent alongside |
162 | * a D-Bus message. |
163 | * |
164 | * If you are not interacting with D-Bus, then there is no reason to make |
165 | * use of this type. |
166 | **/ |
167 | #define G_VARIANT_TYPE_HANDLE ((const GVariantType *) "h") |
168 | |
169 | /** |
170 | * G_VARIANT_TYPE_UNIT: |
171 | * |
172 | * The empty tuple type. Has only one instance. Known also as "triv" |
173 | * or "void". |
174 | **/ |
175 | #define G_VARIANT_TYPE_UNIT ((const GVariantType *) "()") |
176 | |
177 | /** |
178 | * G_VARIANT_TYPE_ANY: |
179 | * |
180 | * An indefinite type that is a supertype of every type (including |
181 | * itself). |
182 | **/ |
183 | #define G_VARIANT_TYPE_ANY ((const GVariantType *) "*") |
184 | |
185 | /** |
186 | * G_VARIANT_TYPE_BASIC: |
187 | * |
188 | * An indefinite type that is a supertype of every basic (ie: |
189 | * non-container) type. |
190 | **/ |
191 | #define G_VARIANT_TYPE_BASIC ((const GVariantType *) "?") |
192 | |
193 | /** |
194 | * G_VARIANT_TYPE_MAYBE: |
195 | * |
196 | * An indefinite type that is a supertype of every maybe type. |
197 | **/ |
198 | #define G_VARIANT_TYPE_MAYBE ((const GVariantType *) "m*") |
199 | |
200 | /** |
201 | * G_VARIANT_TYPE_ARRAY: |
202 | * |
203 | * An indefinite type that is a supertype of every array type. |
204 | **/ |
205 | #define G_VARIANT_TYPE_ARRAY ((const GVariantType *) "a*") |
206 | |
207 | /** |
208 | * G_VARIANT_TYPE_TUPLE: |
209 | * |
210 | * An indefinite type that is a supertype of every tuple type, |
211 | * regardless of the number of items in the tuple. |
212 | **/ |
213 | #define G_VARIANT_TYPE_TUPLE ((const GVariantType *) "r") |
214 | |
215 | /** |
216 | * G_VARIANT_TYPE_DICT_ENTRY: |
217 | * |
218 | * An indefinite type that is a supertype of every dictionary entry |
219 | * type. |
220 | **/ |
221 | #define G_VARIANT_TYPE_DICT_ENTRY ((const GVariantType *) "{?*}") |
222 | |
223 | /** |
224 | * G_VARIANT_TYPE_DICTIONARY: |
225 | * |
226 | * An indefinite type that is a supertype of every dictionary type -- |
227 | * that is, any array type that has an element type equal to any |
228 | * dictionary entry type. |
229 | **/ |
230 | #define G_VARIANT_TYPE_DICTIONARY ((const GVariantType *) "a{?*}") |
231 | |
232 | /** |
233 | * G_VARIANT_TYPE_STRING_ARRAY: |
234 | * |
235 | * The type of an array of strings. |
236 | **/ |
237 | #define G_VARIANT_TYPE_STRING_ARRAY ((const GVariantType *) "as") |
238 | |
239 | /** |
240 | * G_VARIANT_TYPE_OBJECT_PATH_ARRAY: |
241 | * |
242 | * The type of an array of object paths. |
243 | **/ |
244 | #define G_VARIANT_TYPE_OBJECT_PATH_ARRAY ((const GVariantType *) "ao") |
245 | |
246 | /** |
247 | * G_VARIANT_TYPE_BYTESTRING: |
248 | * |
249 | * The type of an array of bytes. This type is commonly used to pass |
250 | * around strings that may not be valid utf8. In that case, the |
251 | * convention is that the nul terminator character should be included as |
252 | * the last character in the array. |
253 | **/ |
254 | #define G_VARIANT_TYPE_BYTESTRING ((const GVariantType *) "ay") |
255 | |
256 | /** |
257 | * G_VARIANT_TYPE_BYTESTRING_ARRAY: |
258 | * |
259 | * The type of an array of byte strings (an array of arrays of bytes). |
260 | **/ |
261 | #define G_VARIANT_TYPE_BYTESTRING_ARRAY ((const GVariantType *) "aay") |
262 | |
263 | /** |
264 | * G_VARIANT_TYPE_VARDICT: |
265 | * |
266 | * The type of a dictionary mapping strings to variants (the ubiquitous |
267 | * "a{sv}" type). |
268 | * |
269 | * Since: 2.30 |
270 | **/ |
271 | #define G_VARIANT_TYPE_VARDICT ((const GVariantType *) "a{sv}") |
272 | |
273 | |
274 | /** |
275 | * G_VARIANT_TYPE: |
276 | * @type_string: a well-formed #GVariantType type string |
277 | * |
278 | * Converts a string to a const #GVariantType. Depending on the |
279 | * current debugging level, this function may perform a runtime check |
280 | * to ensure that @string is a valid GVariant type string. |
281 | * |
282 | * It is always a programmer error to use this macro with an invalid |
283 | * type string. If in doubt, use g_variant_type_string_is_valid() to |
284 | * check if the string is valid. |
285 | * |
286 | * Since 2.24 |
287 | **/ |
288 | #ifndef G_DISABLE_CHECKS |
289 | # define G_VARIANT_TYPE(type_string) (g_variant_type_checked_ ((type_string))) |
290 | #else |
291 | # define G_VARIANT_TYPE(type_string) ((const GVariantType *) (type_string)) |
292 | #endif |
293 | |
294 | /* type string checking */ |
295 | GLIB_AVAILABLE_IN_ALL |
296 | gboolean g_variant_type_string_is_valid (const gchar *type_string); |
297 | GLIB_AVAILABLE_IN_ALL |
298 | gboolean g_variant_type_string_scan (const gchar *string, |
299 | const gchar *limit, |
300 | const gchar **endptr); |
301 | |
302 | /* create/destroy */ |
303 | GLIB_AVAILABLE_IN_ALL |
304 | void g_variant_type_free (GVariantType *type); |
305 | GLIB_AVAILABLE_IN_ALL |
306 | GVariantType * g_variant_type_copy (const GVariantType *type); |
307 | GLIB_AVAILABLE_IN_ALL |
308 | GVariantType * g_variant_type_new (const gchar *type_string); |
309 | |
310 | /* getters */ |
311 | GLIB_AVAILABLE_IN_ALL |
312 | gsize g_variant_type_get_string_length (const GVariantType *type); |
313 | GLIB_AVAILABLE_IN_ALL |
314 | const gchar * g_variant_type_peek_string (const GVariantType *type); |
315 | GLIB_AVAILABLE_IN_ALL |
316 | gchar * g_variant_type_dup_string (const GVariantType *type); |
317 | |
318 | /* classification */ |
319 | GLIB_AVAILABLE_IN_ALL |
320 | gboolean g_variant_type_is_definite (const GVariantType *type); |
321 | GLIB_AVAILABLE_IN_ALL |
322 | gboolean g_variant_type_is_container (const GVariantType *type); |
323 | GLIB_AVAILABLE_IN_ALL |
324 | gboolean g_variant_type_is_basic (const GVariantType *type); |
325 | GLIB_AVAILABLE_IN_ALL |
326 | gboolean g_variant_type_is_maybe (const GVariantType *type); |
327 | GLIB_AVAILABLE_IN_ALL |
328 | gboolean g_variant_type_is_array (const GVariantType *type); |
329 | GLIB_AVAILABLE_IN_ALL |
330 | gboolean g_variant_type_is_tuple (const GVariantType *type); |
331 | GLIB_AVAILABLE_IN_ALL |
332 | gboolean g_variant_type_is_dict_entry (const GVariantType *type); |
333 | GLIB_AVAILABLE_IN_ALL |
334 | gboolean g_variant_type_is_variant (const GVariantType *type); |
335 | |
336 | /* for hash tables */ |
337 | GLIB_AVAILABLE_IN_ALL |
338 | guint g_variant_type_hash (gconstpointer type); |
339 | GLIB_AVAILABLE_IN_ALL |
340 | gboolean g_variant_type_equal (gconstpointer type1, |
341 | gconstpointer type2); |
342 | |
343 | /* subtypes */ |
344 | GLIB_AVAILABLE_IN_ALL |
345 | gboolean g_variant_type_is_subtype_of (const GVariantType *type, |
346 | const GVariantType *supertype); |
347 | |
348 | /* type iterator interface */ |
349 | GLIB_AVAILABLE_IN_ALL |
350 | const GVariantType * g_variant_type_element (const GVariantType *type); |
351 | GLIB_AVAILABLE_IN_ALL |
352 | const GVariantType * g_variant_type_first (const GVariantType *type); |
353 | GLIB_AVAILABLE_IN_ALL |
354 | const GVariantType * g_variant_type_next (const GVariantType *type); |
355 | GLIB_AVAILABLE_IN_ALL |
356 | gsize g_variant_type_n_items (const GVariantType *type); |
357 | GLIB_AVAILABLE_IN_ALL |
358 | const GVariantType * g_variant_type_key (const GVariantType *type); |
359 | GLIB_AVAILABLE_IN_ALL |
360 | const GVariantType * g_variant_type_value (const GVariantType *type); |
361 | |
362 | /* constructors */ |
363 | GLIB_AVAILABLE_IN_ALL |
364 | GVariantType * g_variant_type_new_array (const GVariantType *element); |
365 | GLIB_AVAILABLE_IN_ALL |
366 | GVariantType * g_variant_type_new_maybe (const GVariantType *element); |
367 | GLIB_AVAILABLE_IN_ALL |
368 | GVariantType * g_variant_type_new_tuple (const GVariantType * const *items, |
369 | gint length); |
370 | GLIB_AVAILABLE_IN_ALL |
371 | GVariantType * g_variant_type_new_dict_entry (const GVariantType *key, |
372 | const GVariantType *value); |
373 | |
374 | /*< private >*/ |
375 | GLIB_AVAILABLE_IN_ALL |
376 | const GVariantType * g_variant_type_checked_ (const gchar *); |
377 | GLIB_AVAILABLE_IN_2_56 |
378 | gsize g_variant_type_string_get_depth_ (const gchar *type_string); |
379 | |
380 | G_END_DECLS |
381 | |
382 | #endif /* __G_VARIANT_TYPE_H__ */ |
383 | |