merge GVariantType
[platform/upstream/glib.git] / glib / gvarianttype.c
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 of the licence, 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, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  *
20  * Author: Ryan Lortie <desrt@desrt.ca>
21  */
22
23 #include "gvarianttype.h"
24
25 #include <glib/gtestutils.h>
26
27 #include <string.h>
28
29 #include "galias.h"
30
31 /**
32  * SECTION: gvarianttype
33  * @title: GVariantType
34  * @short_description: introduction to the GVariant type system
35  * @see_also: #GVariantType, #GVariant
36  *
37  * This section introduces the GVariant type system.  It is based, in
38  * large part, on the DBus type system, with two major changes and some minor
39  * lifting of restrictions.  The <ulink
40  * url='http://dbus.freedesktop.org/doc/dbus-specification.html'>DBus
41  * specification</ulink>, therefore, provides a significant amount of
42  * information that is useful when working with GVariant.
43  *
44  * The first major change with respect to the DBus type system is the
45  * introduction of maybe (or "nullable") types.  Any type in GVariant can be
46  * converted to a maybe type, in which case, "nothing" (or "null") becomes a
47  * valid value.  Maybe types have been added by introducing the
48  * character "<literal>m</literal>" to type strings.
49  *
50  * The second major change is that the GVariant type system supports the
51  * concept of "indefinite types" -- types that are less specific than
52  * the normal types found in DBus.  For example, it is possible to speak
53  * of "an array of any type" in GVariant, where the DBus type system
54  * would require you to speak of "an array of integers" or "an array of
55  * strings".  Indefinite types have been added by introducing the
56  * characters "<literal>*</literal>", "<literal>?</literal>" and
57  * "<literal>r</literal>" to type strings.
58  *
59  * Finally, all arbitrary restrictions relating to the complexity of
60  * types are lifted along with the restriction that dictionary entries
61  * may only appear nested inside of arrays.
62  *
63  * Just as in DBus, GVariant types are described with strings ("type
64  * strings").  Subject to the differences mentioned above, these strings
65  * are of the same form as those found in DBus.  Note, however: DBus
66  * always works in terms of messages and therefore individual type
67  * strings appear nowhere in its interface.  Instead, "signatures"
68  * are a concatenation of the strings of the type of each argument in a
69  * message.  GVariant deals with single values directly so GVariant type
70  * strings always describe the type of exactly one value.  This means
71  * that a DBus signature string is generally not a valid GVariant type
72  * string -- except in the case that it is the signature of a message
73  * containing exactly one argument.
74  *
75  * An indefinite type is similar in spirit to what may be called an
76  * abstract type in other type systems.  No value can exist that has an
77  * indefinite type as its type, but values can exist that have types
78  * that are subtypes of indefinite types.  That is to say,
79  * g_variant_get_type() will never return an indefinite type, but
80  * calling g_variant_is_a() with an indefinite type may return %TRUE.
81  * For example, you can not have a value that represents "an array of no
82  * particular type", but you can have an "array of integers" which
83  * certainly matches the type of "an array of no particular type", since
84  * "array of integers" is a subtype of "array of no particular type".
85  *
86  * This is similar to how instances of abstract classes may not
87  * directly exist in other type systems, but instances of their
88  * non-abstract subtypes may.  For example, in GTK, no object that has
89  * the type of #GtkBin can exist (since #GtkBin is an abstract class),
90  * but a #GtkWindow can certainly be instantiated, and you would say
91  * that the #GtkWindow is a #GtkBin (since #GtkWindow is a subclass of
92  * #GtkBin).
93  *
94  * A detailed description of GVariant type strings is given here:
95  *
96  * <refsect2 id='gvariant-typestrings'>
97  *  <title>GVariant Type Strings</title>
98  *  <para>
99  *   A GVariant type string can be any of the following:
100  *  </para>
101  *  <itemizedlist>
102  *   <listitem>
103  *    <para>
104  *     any basic type string (listed below)
105  *    </para>
106  *   </listitem>
107  *   <listitem>
108  *    <para>
109  *     "<literal>v</literal>", "<literal>r</literal>" or
110  *     "<literal>*</literal>"
111  *    </para>
112  *   </listitem>
113  *   <listitem>
114  *    <para>
115  *     one of the characters '<literal>a</literal>' or
116  *     '<literal>m</literal>', followed by another type string
117  *    </para>
118  *   </listitem>
119  *   <listitem>
120  *    <para>
121  *     the character '<literal>(</literal>', followed by a concatenation
122  *     of zero or more other type strings, followed by the character
123  *     '<literal>)</literal>'
124  *    </para>
125  *   </listitem>
126  *   <listitem>
127  *    <para>
128  *     the character '<literal>{</literal>', followed by a basic type
129  *     string (see below), followed by another type string, followed by
130  *     the character '<literal>}</literal>'
131  *    </para>
132  *   </listitem>
133  *  </itemizedlist>
134  *  <para>
135  *   A basic type string describes a basic type (as per
136  *   g_variant_type_is_basic()) and is always a single
137  *   character in length.  The valid basic type strings are
138  *   "<literal>b</literal>", "<literal>y</literal>",
139  *   "<literal>n</literal>", "<literal>q</literal>",
140  *   "<literal>i</literal>", "<literal>u</literal>",
141  *   "<literal>x</literal>", "<literal>t</literal>",
142  *   "<literal>h</literal>", "<literal>d</literal>",
143  *   "<literal>s</literal>", "<literal>o</literal>",
144  *   "<literal>g</literal>" and "<literal>?</literal>".
145  *  </para>
146  *  <para>
147  *   The above definition is recursive to arbitrary depth.
148  *   "<literal>aaaaai</literal>" and "<literal>(ui(nq((y)))s)</literal>"
149  *   are both valid type strings, as is
150  *   "<literal>a(aa(ui)(qna{ya(yd)}))</literal>".
151  *  </para>
152  *  <para>
153  *   The meaning of each of the characters is as follows:
154  *  </para>
155  *  <informaltable>
156  *   <tgroup cols='2'>
157  *    <tbody>
158  *     <row>
159  *      <entry>
160  *       <para>
161  *        <emphasis role='strong'>Character</emphasis>
162  *       </para>
163  *      </entry>
164  *      <entry>
165  *       <para>
166  *        <emphasis role='strong'>Meaning</emphasis>
167  *       </para>
168  *      </entry>
169  *     </row>
170  *     <row>
171  *      <entry>
172  *       <para>
173  *        <literal>b</literal>
174  *       </para>
175  *      </entry>
176  *      <entry>
177  *       <para>
178  *        the type string of %G_VARIANT_TYPE_BOOLEAN; a boolean value.
179  *       </para>
180  *      </entry>
181  *     </row>
182  *     <row>
183  *      <entry>
184  *       <para>
185  *        <literal>y</literal>
186  *       </para>
187  *      </entry>
188  *      <entry>
189  *       <para>
190  *        the type string of %G_VARIANT_TYPE_BYTE; a byte.
191  *       </para>
192  *      </entry>
193  *     </row>
194  *     <row>
195  *      <entry>
196  *       <para>
197  *        <literal>n</literal>
198  *       </para>
199  *      </entry>
200  *      <entry>
201  *       <para>
202  *        the type string of %G_VARIANT_TYPE_INT16; a signed 16 bit
203  *        integer.
204  *       </para>
205  *      </entry>
206  *     </row>
207  *     <row>
208  *      <entry>
209  *       <para>
210  *        <literal>q</literal>
211  *       </para>
212  *      </entry>
213  *      <entry>
214  *       <para>
215  *        the type string of %G_VARIANT_TYPE_UINT16; an unsigned 16 bit
216  *        integer.
217  *       </para>
218  *      </entry>
219  *     </row>
220  *     <row>
221  *      <entry>
222  *       <para>
223  *        <literal>i</literal>
224  *       </para>
225  *      </entry>
226  *      <entry>
227  *       <para>
228  *        the type string of %G_VARIANT_TYPE_INT32; a signed 32 bit
229  *        integer.
230  *       </para>
231  *      </entry>
232  *     </row>
233  *     <row>
234  *      <entry>
235  *       <para>
236  *        <literal>u</literal>
237  *       </para>
238  *      </entry>
239  *      <entry>
240  *       <para>
241  *        the type string of %G_VARIANT_TYPE_UINT32; an unsigned 32 bit
242  *        integer.
243  *       </para>
244  *      </entry>
245  *     </row>
246  *     <row>
247  *      <entry>
248  *       <para>
249  *        <literal>x</literal>
250  *       </para>
251  *      </entry>
252  *      <entry>
253  *       <para>
254  *        the type string of %G_VARIANT_TYPE_INT64; a signed 64 bit
255  *        integer.
256  *       </para>
257  *      </entry>
258  *     </row>
259  *     <row>
260  *      <entry>
261  *       <para>
262  *        <literal>t</literal>
263  *       </para>
264  *      </entry>
265  *      <entry>
266  *       <para>
267  *        the type string of %G_VARIANT_TYPE_UINT64; an unsigned 64 bit
268  *        integer.
269  *       </para>
270  *      </entry>
271  *     </row>
272  *     <row>
273  *      <entry>
274  *       <para>
275  *        <literal>h</literal>
276  *       </para>
277  *      </entry>
278  *      <entry>
279  *       <para>
280  *        the type string of %G_VARIANT_TYPE_HANDLE; a signed 32 bit
281  *        value that, by convention, is used as an index into an array
282  *        of file descriptors that are sent alongside a DBus message.
283  *       </para>
284  *      </entry>
285  *     </row>
286  *     <row>
287  *      <entry>
288  *       <para>
289  *        <literal>d</literal>
290  *       </para>
291  *      </entry>
292  *      <entry>
293  *       <para>
294  *        the type string of %G_VARIANT_TYPE_DOUBLE; a double precision
295  *        floating point value.
296  *       </para>
297  *      </entry>
298  *     </row>
299  *     <row>
300  *      <entry>
301  *       <para>
302  *        <literal>s</literal>
303  *       </para>
304  *      </entry>
305  *      <entry>
306  *       <para>
307  *        the type string of %G_VARIANT_TYPE_STRING; a string.
308  *       </para>
309  *      </entry>
310  *     </row>
311  *     <row>
312  *      <entry>
313  *       <para>
314  *        <literal>o</literal>
315  *       </para>
316  *      </entry>
317  *      <entry>
318  *       <para>
319  *        the type string of %G_VARIANT_TYPE_OBJECT_PATH; a string in
320  *        the form of a DBus object path.
321  *       </para>
322  *      </entry>
323  *     </row>
324  *     <row>
325  *      <entry>
326  *       <para>
327  *        <literal>g</literal>
328  *       </para>
329  *      </entry>
330  *      <entry>
331  *       <para>
332  *        the type string of %G_VARIANT_TYPE_STRING; a string in the
333  *        form of a DBus type signature.
334  *       </para>
335  *      </entry>
336  *     </row>
337  *     <row>
338  *      <entry>
339  *       <para>
340  *        <literal>?</literal>
341  *       </para>
342  *      </entry>
343  *      <entry>
344  *       <para>
345  *        the type string of %G_VARIANT_TYPE_BASIC; an indefinite type
346  *        that is a supertype of any of the basic types.
347  *       </para>
348  *      </entry>
349  *     </row>
350  *     <row>
351  *      <entry>
352  *       <para>
353  *        <literal>v</literal>
354  *       </para>
355  *      </entry>
356  *      <entry>
357  *       <para>
358  *        the type string of %G_VARIANT_TYPE_VARIANT; a container type
359  *        that contain any other type of value.
360  *       </para>
361  *      </entry>
362  *     </row>
363  *     <row>
364  *      <entry>
365  *       <para>
366  *        <literal>a</literal>
367  *       </para>
368  *      </entry>
369  *      <entry>
370  *       <para>
371  *        used as a prefix on another type string to mean an array of
372  *        that type; the type string "<literal>ai</literal>", for
373  *        example, is the type of an array of 32 bit signed integers.
374  *       </para>
375  *      </entry>
376  *     </row>
377  *     <row>
378  *      <entry>
379  *       <para>
380  *        <literal>m</literal>
381  *       </para>
382  *      </entry>
383  *      <entry>
384  *       <para>
385  *        used as a prefix on another type string to mean a "maybe", or
386  *        "nullable", version of that type; the type string
387  *        "<literal>ms</literal>", for example, is the type of a value
388  *        that maybe contains a string, or maybe contains nothing.
389  *       </para>
390  *      </entry>
391  *     </row>
392  *     <row>
393  *      <entry>
394  *       <para>
395  *        <literal>()</literal>
396  *       </para>
397  *      </entry>
398  *      <entry>
399  *       <para>
400  *        used to enclose zero or more other concatenated type strings
401  *        to create a tuple type; the type string
402  *        "<literal>(is)</literal>", for example, is the type of a pair
403  *        of an integer and a string.
404  *       </para>
405  *      </entry>
406  *     </row>
407  *     <row>
408  *      <entry>
409  *       <para>
410  *        <literal>r</literal>
411  *       </para>
412  *      </entry>
413  *      <entry>
414  *       <para>
415  *        the type string of %G_VARIANT_TYPE_TUPLE; an indefinite type
416  *        that is a supertype of any tuple type, regardless of the
417  *        number of items.
418  *       </para>
419  *      </entry>
420  *     </row>
421  *     <row>
422  *      <entry>
423  *       <para>
424  *        <literal>{}</literal>
425  *       </para>
426  *      </entry>
427  *      <entry>
428  *       <para>
429  *        used to enclose a basic type string concatenated with another
430  *        type string to create a dictionary entry type, which usually
431  *        appears inside of an array to form a dictionary; the type
432  *        string "<literal>a{sd}</literal>", for example, is the type of
433  *        a dictionary that maps strings to double precision floating
434  *        point values.
435  *       </para>
436  *       <para>
437  *        The first type (the basic type) is the key type and the second
438  *        type is the value type.  The reason that the first type is
439  *        restricted to being a basic type is so that it can easily be
440  *        hashed.
441  *       </para>
442  *      </entry>
443  *     </row>
444  *     <row>
445  *      <entry>
446  *       <para>
447  *        <literal>*</literal>
448  *       </para>
449  *      </entry>
450  *      <entry>
451  *       <para>
452  *        the type string of %G_VARIANT_TYPE_ANY; the indefinite type
453  *        that is a supertype of all types.  Note that, as with all type
454  *        strings, this character represents exactly one type.  It
455  *        cannot be used inside of tuples to mean "any number of items".
456  *       </para>
457  *      </entry>
458  *     </row>
459  *    </tbody>
460  *   </tgroup>
461  *  </informaltable>
462  *  <para>
463  *   Any type string of a container that contains an indefinite type is,
464  *   itself, an indefinite type.  For example, the type string
465  *   "<literal>a*</literal>" (corresponding to %G_VARIANT_TYPE_ARRAY) is
466  *   an indefinite type that is a supertype of every array type.
467  *   "<literal>(*s)</literal>" is a supertype of all tuples that
468  *   contain exactly two items where the second item is a string.
469  *  </para>
470  *  <para>
471  *   "<literal>a{?*}</literal>" is an indefinite type that is a
472  *   supertype of all arrays containing dictionary entries where the key
473  *   is any basic type and the value is any type at all.  This is, by
474  *   definition, a dictionary, so this type string corresponds to
475  *   %G_VARIANT_TYPE_DICTIONARY.  Note that, due to the restriction that
476  *   the key of a dictionary entry must be a basic type,
477  *   "<literal>{**}</literal>" is not a valid type string.
478  *  </para>
479  * </refsect2>
480  */
481
482 /**
483  * GVariantType:
484  *
485  * A type in the GVariant type system.
486  *
487  * Two types may not be compared by value; use g_variant_type_equal() or
488  * g_variant_type_is_subtype().  May be copied using
489  * g_variant_type_copy() and freed using g_variant_type_free().
490  **/
491
492 /**
493  * G_VARIANT_TYPE:
494  * @type_string: a well-formed #GVariantType type string
495  *
496  * Converts a string to a const #GVariantType.  Depending on the
497  * current debugging level, this function may perform a runtime check
498  * to ensure that @string is a valid GVariant type string.
499  *
500  * It is always a programmer error to use this macro with an invalid
501  * type string.
502  *
503  * Since 2.24
504  **/
505
506 static gboolean
507 g_variant_type_check (const GVariantType *type)
508 {
509   const gchar *type_string;
510
511   if (type == NULL)
512     return FALSE;
513
514   type_string = (const gchar *) type;
515 #ifndef G_DISABLE_CHECKS
516   return g_variant_type_string_scan (type_string, NULL, NULL);
517 #else
518   return TRUE;
519 #endif
520 }
521
522 /**
523  * g_variant_type_string_scan:
524  * @string: a pointer to any string
525  * @limit: the end of @string, or %NULL
526  * @endptr: location to store the end pointer, or %NULL
527  * @returns: %TRUE if a valid type string was found
528  *
529  * Scan for a single complete and valid GVariant type string in @string.
530  * The memory pointed to by @limit (or bytes beyond it) is never
531  * accessed.
532  *
533  * If a valid type string is found, @endptr is updated to point to the
534  * first character past the end of the string that was found and %TRUE
535  * is returned.
536  *
537  * If there is no valid type string starting at @string, or if the type
538  * string does not end before @limit then %FALSE is returned.
539  *
540  * For the simple case of checking if a string is a valid type string,
541  * see g_variant_type_string_is_valid().
542  *
543  * Since: 2.24
544  **/
545 gboolean
546 g_variant_type_string_scan (const gchar  *string,
547                             const gchar  *limit,
548                             const gchar **endptr)
549 {
550   g_return_val_if_fail (string != NULL, FALSE);
551
552   if (string == limit || *string == '\0')
553     return FALSE;
554
555   switch (*string++)
556     {
557     case '(':
558       while (string == limit || *string != ')')
559         if (!g_variant_type_string_scan (string, limit, &string))
560           return FALSE;
561
562       string++;
563       break;
564
565     case '{':
566       if (string == limit || *string == '\0' ||                    /* { */
567           !strchr ("bynqihuxtdsog?", *string++) ||                 /* key */
568           !g_variant_type_string_scan (string, limit, &string) ||  /* value */
569           string == limit || *string++ != '}')                     /* } */
570         return FALSE;
571
572       break;
573
574     case 'm': case 'a':
575       return g_variant_type_string_scan (string, limit, endptr);
576
577     case 'b': case 'y': case 'n': case 'q': case 'i': case 'u':
578     case 'x': case 't': case 'd': case 's': case 'o': case 'g':
579     case 'v': case 'r': case '*': case '?': case 'h':
580       break;
581
582     default:
583       return FALSE;
584     }
585
586   if (endptr != NULL)
587     *endptr = string;
588
589   return TRUE;
590 }
591
592 /**
593  * g_variant_type_string_is_valid:
594  * @type_string: a pointer to any string
595  * @returns: %TRUE if @type_string is exactly one valid type string
596  *
597  * Checks if @type_string is a valid GVariant type string.  This call is
598  * equivalent to calling g_variant_type_string_scan() and confirming
599  * that the following character is a nul terminator.
600  *
601  * Since 2.24
602  **/
603 gboolean
604 g_variant_type_string_is_valid (const gchar *type_string)
605 {
606   gchar *endptr;
607
608   g_return_val_if_fail (type_string != NULL, FALSE);
609
610   if (!g_variant_type_string_scan (type_string, NULL, &endptr))
611     return FALSE;
612
613   return *endptr == '\0';
614 }
615
616 /**
617  * g_variant_type_free:
618  * @type: a #GVariantType, or %NULL
619  *
620  * Frees a #GVariantType that was allocated with
621  * g_variant_type_copy(), g_variant_type_new() or one of the container
622  * type constructor functions.
623  *
624  * In the case that @type is %NULL, this function does nothing.
625  *
626  * Since 2.24
627  **/
628 void
629 g_variant_type_free (GVariantType *type)
630 {
631   g_return_if_fail (type == NULL || g_variant_type_check (type));
632
633   g_free (type);
634 }
635
636 /**
637  * g_variant_type_copy:
638  * @type: a #GVariantType
639  * @returns: a new #GVariantType
640  *
641  * Makes a copy of a #GVariantType.  It is appropriate to call
642  * g_variant_type_free() on the return value.  @type may not be %NULL.
643  *
644  * Since 2.24
645  **/
646 GVariantType *
647 g_variant_type_copy (const GVariantType *type)
648 {
649   gsize length;
650   gchar *new;
651
652   g_return_val_if_fail (g_variant_type_check (type), NULL);
653
654   length = g_variant_type_get_string_length (type);
655   new = g_malloc (length + 1);
656
657   memcpy (new, type, length);
658   new[length] = '\0';
659
660   return (GVariantType *) new;
661 }
662
663 /**
664  * g_variant_type_new:
665  * @type_string: a valid GVariant type string
666  * @returns: a new #GVariantType
667  *
668  * Creates a new #GVariantType corresponding to the type string given
669  * by @type_string.  It is appropriate to call g_variant_type_free() on
670  * the return value.
671  *
672  * It is a programmer error to call this function with an invalid type
673  * string.  Use g_variant_type_string_is_valid() if you are unsure.
674  */
675 GVariantType *
676 g_variant_type_new (const gchar *type_string)
677 {
678   g_return_val_if_fail (type_string != NULL, NULL);
679
680   return g_variant_type_copy (G_VARIANT_TYPE (type_string));
681 }
682
683 /**
684  * g_variant_type_get_string_length:
685  * @type: a #GVariantType
686  * @returns: the length of the corresponding type string
687  *
688  * Returns the length of the type string corresponding to the given
689  * @type.  This function must be used to determine the valid extent of
690  * the memory region returned by g_variant_type_peek_string().
691  *
692  * Since 2.24
693  **/
694 gsize
695 g_variant_type_get_string_length (const GVariantType *type)
696 {
697   const gchar *type_string = (const gchar *) type;
698   gint brackets = 0;
699   gsize index = 0;
700
701   g_return_val_if_fail (g_variant_type_check (type), 0);
702
703   do
704     {
705       while (type_string[index] == 'a' || type_string[index] == 'm')
706         index++;
707
708       if (type_string[index] == '(' || type_string[index] == '{')
709         brackets++;
710
711       else if (type_string[index] == ')' || type_string[index] == '}')
712         brackets--;
713
714       index++;
715     }
716   while (brackets);
717
718   return index;
719 }
720
721 /**
722  * g_variant_type_peek_string:
723  * @type: a #GVariantType
724  * @returns: the corresponding type string (not nul-terminated)
725  *
726  * Returns the type string corresponding to the given @type.  The
727  * result is not nul-terminated; in order to determine its length you
728  * must call g_variant_type_get_string_length().
729  *
730  * To get a nul-terminated string, see g_variant_type_dup_string().
731  *
732  * Since 2.24
733  **/
734 const gchar *
735 g_variant_type_peek_string (const GVariantType *type)
736 {
737   g_return_val_if_fail (g_variant_type_check (type), NULL);
738
739   return (const gchar *) type;
740 }
741
742 /**
743  * g_variant_type_dup_string:
744  * @type: a #GVariantType
745  * @returns: the corresponding type string
746  *
747  * Returns a newly-allocated copy of the type string corresponding to
748  * @type.  The returned string is nul-terminated.  It is appropriate to
749  * call g_free() on the return value.
750  *
751  * Since 2.24
752  **/
753 gchar *
754 g_variant_type_dup_string (const GVariantType *type)
755 {
756   g_return_val_if_fail (g_variant_type_check (type), NULL);
757
758   return g_strndup (g_variant_type_peek_string (type),
759                     g_variant_type_get_string_length (type));
760 }
761
762 /**
763  * g_variant_type_is_definite:
764  * @type: a #GVariantType
765  * @returns: %TRUE if @type is definite
766  *
767  * Determines if the given @type is definite (ie: not indefinite).
768  *
769  * A type is definite if its type string does not contain any indefinite
770  * type characters ('*', '?', or 'r').
771  *
772  * A #GVariant instance may not have an indefinite type, so calling
773  * this function on the result of g_variant_get_type() will always
774  * result in %TRUE being returned.  Calling this function on an
775  * indefinite type like %G_VARIANT_TYPE_ARRAY, however, will result in
776  * %FALSE being returned.
777  *
778  * Since 2.24
779  **/
780 gboolean
781 g_variant_type_is_definite (const GVariantType *type)
782 {
783   const gchar *type_string;
784   gsize type_length;
785   gsize i;
786
787   g_return_val_if_fail (g_variant_type_check (type), FALSE);
788
789   type_length = g_variant_type_get_string_length (type);
790   type_string = g_variant_type_peek_string (type);
791
792   for (i = 0; i < type_length; i++)
793     if (type_string[i] == '*' ||
794         type_string[i] == '?' ||
795         type_string[i] == 'r')
796       return FALSE;
797
798   return TRUE;
799 }
800
801 /**
802  * g_variant_type_is_container:
803  * @type: a #GVariantType
804  * @returns: %TRUE if @type is a container type
805  *
806  * Determines if the given @type is a container type.
807  *
808  * Container types are any array, maybe, tuple, or dictionary
809  * entry types plus the variant type.
810  *
811  * This function returns %TRUE for any indefinite type for which every
812  * definite subtype is a container -- %G_VARIANT_TYPE_ARRAY, for
813  * example.
814  *
815  * Since 2.24
816  **/
817 gboolean
818 g_variant_type_is_container (const GVariantType *type)
819 {
820   gchar first_char;
821
822   g_return_val_if_fail (g_variant_type_check (type), FALSE);
823
824   first_char = g_variant_type_peek_string (type)[0];
825   switch (first_char)
826   {
827     case 'a':
828     case 'm':
829     case 'r':
830     case '(':
831     case '{':
832     case 'v':
833       return TRUE;
834
835     default:
836       return FALSE;
837   }
838 }
839
840 /**
841  * g_variant_type_is_basic:
842  * @type: a #GVariantType
843  * @returns: %TRUE if @type is a basic type
844  *
845  * Determines if the given @type is a basic type.
846  *
847  * Basic types are booleans, bytes, integers, doubles, strings, object
848  * paths and signatures.
849  *
850  * Only a basic type may be used as the key of a dictionary entry.
851  *
852  * This function returns %FALSE for all indefinite types except
853  * %G_VARIANT_TYPE_BASIC.
854  *
855  * Since 2.24
856  **/
857 gboolean
858 g_variant_type_is_basic (const GVariantType *type)
859 {
860   gchar first_char;
861
862   g_return_val_if_fail (g_variant_type_check (type), FALSE);
863
864   first_char = g_variant_type_peek_string (type)[0];
865   switch (first_char)
866   {
867     case 'b':
868     case 'y':
869     case 'n':
870     case 'q':
871     case 'i':
872     case 'h':
873     case 'u':
874     case 't':
875     case 'x':
876     case 'd':
877     case 's':
878     case 'o':
879     case 'g':
880     case '?':
881       return TRUE;
882
883     default:
884       return FALSE;
885   }
886 }
887
888 /**
889  * g_variant_type_is_maybe:
890  * @type: a #GVariantType
891  * @returns: %TRUE if @type is a maybe type
892  *
893  * Determines if the given @type is a maybe type.  This is true if the
894  * type string for @type starts with an 'm'.
895  *
896  * This function returns %TRUE for any indefinite type for which every
897  * definite subtype is a maybe type -- %G_VARIANT_TYPE_MAYBE, for
898  * example.
899  *
900  * Since 2.24
901  **/
902 gboolean
903 g_variant_type_is_maybe (const GVariantType *type)
904 {
905   g_return_val_if_fail (g_variant_type_check (type), FALSE);
906
907   return g_variant_type_peek_string (type)[0] == 'm';
908 }
909
910 /**
911  * g_variant_type_is_array:
912  * @type: a #GVariantType
913  * @returns: %TRUE if @type is an array type
914  *
915  * Determines if the given @type is an array type.  This is true if the
916  * type string for @type starts with an 'a'.
917  *
918  * This function returns %TRUE for any indefinite type for which every
919  * definite subtype is an array type -- %G_VARIANT_TYPE_ARRAY, for
920  * example.
921  *
922  * Since 2.24
923  **/
924 gboolean
925 g_variant_type_is_array (const GVariantType *type)
926 {
927   g_return_val_if_fail (g_variant_type_check (type), FALSE);
928
929   return g_variant_type_peek_string (type)[0] == 'a';
930 }
931
932 /**
933  * g_variant_type_is_tuple:
934  * @type: a #GVariantType
935  * @returns: %TRUE if @type is a tuple type
936  *
937  * Determines if the given @type is a tuple type.  This is true if the
938  * type string for @type starts with a '(' or if @type is
939  * %G_VARIANT_TYPE_TUPLE.
940  *
941  * This function returns %TRUE for any indefinite type for which every
942  * definite subtype is a tuple type -- %G_VARIANT_TYPE_TUPLE, for
943  * example.
944  *
945  * Since 2.24
946  **/
947 gboolean
948 g_variant_type_is_tuple (const GVariantType *type)
949 {
950   gchar type_char;
951
952   g_return_val_if_fail (g_variant_type_check (type), FALSE);
953
954   type_char = g_variant_type_peek_string (type)[0];
955   return type_char == 'r' || type_char == '(';
956 }
957
958 /**
959  * g_variant_type_is_dict_entry:
960  * @type: a #GVariantType
961  * @returns: %TRUE if @type is a dictionary entry type
962  *
963  * Determines if the given @type is a dictionary entry type.  This is
964  * true if the type string for @type starts with a '{'.
965  *
966  * This function returns %TRUE for any indefinite type for which every
967  * definite subtype is a dictionary entry type --
968  * %G_VARIANT_TYPE_DICT_ENTRY, for example.
969  *
970  * Since 2.24
971  **/
972 gboolean
973 g_variant_type_is_dict_entry (const GVariantType *type)
974 {
975   g_return_val_if_fail (g_variant_type_check (type), FALSE);
976
977   return g_variant_type_peek_string (type)[0] == '{';
978 }
979
980 /**
981  * g_variant_type_hash:
982  * @type: a #GVariantType
983  * @returns: the hash value
984  *
985  * Hashes @type.
986  *
987  * The argument type of @type is only #gconstpointer to allow use with
988  * #GHashTable without function pointer casting.  A valid
989  * #GVariantType must be provided.
990  *
991  * Since 2.24
992  **/
993 guint
994 g_variant_type_hash (gconstpointer type)
995 {
996   const gchar *type_string;
997   guint value = 0;
998   gsize length;
999   gsize i;
1000
1001   g_return_val_if_fail (g_variant_type_check (type), 0);
1002
1003   type_string = g_variant_type_peek_string (type);
1004   length = g_variant_type_get_string_length (type);
1005
1006   for (i = 0; i < length; i++)
1007     value = (value << 5) - value + type_string[i];
1008
1009   return value;
1010 }
1011
1012 /**
1013  * g_variant_type_equal:
1014  * @type1: a #GVariantType
1015  * @type2: a #GVariantType
1016  * @returns: %TRUE if @type1 and @type2 are exactly equal
1017  *
1018  * Compares @type1 and @type2 for equality.
1019  *
1020  * Only returns %TRUE if the types are exactly equal.  Even if one type
1021  * is an indefinite type and the other is a subtype of it, %FALSE will
1022  * be returned if they are not exactly equal.  If you want to check for
1023  * subtypes, use g_variant_type_is_subtype_of().
1024  *
1025  * The argument types of @type1 and @type2 are only #gconstpointer to
1026  * allow use with #GHashTable without function pointer casting.  For
1027  * both arguments, a valid #GVariantType must be provided.
1028  *
1029  * Since 2.24
1030  **/
1031 gboolean
1032 g_variant_type_equal (gconstpointer type1,
1033                       gconstpointer type2)
1034 {
1035   const gchar *string1, *string2;
1036   gsize size1, size2;
1037
1038   g_return_val_if_fail (g_variant_type_check (type1), FALSE);
1039   g_return_val_if_fail (g_variant_type_check (type2), FALSE);
1040
1041   if (type1 == type2)
1042     return TRUE;
1043
1044   size1 = g_variant_type_get_string_length (type1);
1045   size2 = g_variant_type_get_string_length (type2);
1046
1047   if (size1 != size2)
1048     return FALSE;
1049
1050   string1 = g_variant_type_peek_string (type1);
1051   string2 = g_variant_type_peek_string (type2);
1052
1053   return memcmp (string1, string2, size1) == 0;
1054 }
1055
1056 /**
1057  * g_variant_type_is_subtype_of:
1058  * @type: a #GVariantType
1059  * @supertype: a #GVariantType
1060  * @returns: %TRUE if @type is a subtype of @supertype
1061  *
1062  * Checks if @type is a subtype of @supertype.
1063  *
1064  * This function returns %TRUE if @type is a subtype of @supertype.  All
1065  * types are considered to be subtypes of themselves.  Aside from that,
1066  * only indefinite types can have subtypes.
1067  *
1068  * Since 2.24
1069  **/
1070 gboolean
1071 g_variant_type_is_subtype_of (const GVariantType *type,
1072                               const GVariantType *supertype)
1073 {
1074   const gchar *supertype_string;
1075   const gchar *supertype_end;
1076   const gchar *type_string;
1077
1078   g_return_val_if_fail (g_variant_type_check (type), FALSE);
1079   g_return_val_if_fail (g_variant_type_check (supertype), FALSE);
1080
1081   supertype_string = g_variant_type_peek_string (supertype);
1082   type_string = g_variant_type_peek_string (type);
1083
1084   supertype_end = supertype_string +
1085                   g_variant_type_get_string_length (supertype);
1086
1087   /* we know that type and supertype are both well-formed, so it's
1088    * safe to treat this merely as a text processing problem.
1089    */
1090   while (supertype_string < supertype_end)
1091     {
1092       char supertype_char = *supertype_string++;
1093
1094       if (supertype_char == *type_string)
1095         type_string++;
1096
1097       else if (*type_string == ')')
1098         return FALSE;
1099
1100       else
1101         {
1102           const GVariantType *target_type = (GVariantType *) type_string;
1103
1104           switch (supertype_char)
1105             {
1106             case 'r':
1107               if (!g_variant_type_is_tuple (target_type))
1108                 return FALSE;
1109               break;
1110
1111             case '*':
1112               break;
1113
1114             case '?':
1115               if (!g_variant_type_is_basic (target_type))
1116                 return FALSE;
1117               break;
1118
1119             default:
1120               return FALSE;
1121             }
1122
1123           type_string += g_variant_type_get_string_length (target_type);
1124         }
1125     }
1126
1127   return TRUE;
1128 }
1129
1130 /**
1131  * g_variant_type_element:
1132  * @type: an array or maybe #GVariantType
1133  * @returns: the element type of @type
1134  *
1135  * Determines the element type of an array or maybe type.
1136  *
1137  * This function may only be used with array or maybe types.
1138  *
1139  * Since 2.24
1140  **/
1141 const GVariantType *
1142 g_variant_type_element (const GVariantType *type)
1143 {
1144   const gchar *type_string;
1145
1146   g_return_val_if_fail (g_variant_type_check (type), NULL);
1147
1148   type_string = g_variant_type_peek_string (type);
1149
1150   g_assert (type_string[0] == 'a' || type_string[0] == 'm');
1151
1152   return (const GVariantType *) &type_string[1];
1153 }
1154
1155 /**
1156  * g_variant_type_first:
1157  * @type: a tuple or dictionary entry #GVariantType
1158  * @returns: the first item type of @type, or %NULL
1159  *
1160  * Determines the first item type of a tuple or dictionary entry
1161  * type.
1162  *
1163  * This function may only be used with tuple or dictionary entry types,
1164  * but must not be used with the generic tuple type
1165  * %G_VARIANT_TYPE_TUPLE.
1166  *
1167  * In the case of a dictionary entry type, this returns the type of
1168  * the key.
1169  *
1170  * %NULL is returned in case of @type being %G_VARIANT_TYPE_UNIT.
1171  *
1172  * This call, together with g_variant_type_next() provides an iterator
1173  * interface over tuple and dictionary entry types.
1174  *
1175  * Since 2.24
1176  **/
1177 const GVariantType *
1178 g_variant_type_first (const GVariantType *type)
1179 {
1180   const gchar *type_string;
1181
1182   g_return_val_if_fail (g_variant_type_check (type), NULL);
1183
1184   type_string = g_variant_type_peek_string (type);
1185   g_assert (type_string[0] == '(' || type_string[0] == '{');
1186
1187   if (type_string[1] == ')')
1188     return NULL;
1189
1190   return (const GVariantType *) &type_string[1];
1191 }
1192
1193 /**
1194  * g_variant_type_next:
1195  * @type: a #GVariantType from a previous call
1196  * @returns: the next #GVariantType after @type, or %NULL
1197  *
1198  * Determines the next item type of a tuple or dictionary entry
1199  * type.
1200  *
1201  * @type must be the result of a previous call to
1202  * g_variant_type_first() or g_variant_type_next().
1203  *
1204  * If called on the key type of a dictionary entry then this call
1205  * returns the value type.  If called on the value type of a dictionary
1206  * entry then this call returns %NULL.
1207  *
1208  * For tuples, %NULL is returned when @type is the last item in a tuple.
1209  *
1210  * Since 2.24
1211  **/
1212 const GVariantType *
1213 g_variant_type_next (const GVariantType *type)
1214 {
1215   const gchar *type_string;
1216
1217   g_return_val_if_fail (g_variant_type_check (type), NULL);
1218
1219   type_string = g_variant_type_peek_string (type);
1220   type_string += g_variant_type_get_string_length (type);
1221
1222   if (*type_string == ')' || *type_string == '}')
1223     return NULL;
1224
1225   return (const GVariantType *) type_string;
1226 }
1227
1228 /**
1229  * g_variant_type_n_items:
1230  * @type: a tuple or dictionary entry #GVariantType
1231  * @returns: the number of items in @type
1232  *
1233  * Determines the number of items contained in a tuple or
1234  * dictionary entry type.
1235  *
1236  * This function may only be used with tuple or dictionary entry types,
1237  * but must not be used with the generic tuple type
1238  * %G_VARIANT_TYPE_TUPLE.
1239  *
1240  * In the case of a dictionary entry type, this function will always
1241  * return 2.
1242  *
1243  * Since 2.24
1244  **/
1245 gsize
1246 g_variant_type_n_items (const GVariantType *type)
1247 {
1248   gsize count = 0;
1249
1250   g_return_val_if_fail (g_variant_type_check (type), 0);
1251
1252   for (type = g_variant_type_first (type);
1253        type;
1254        type = g_variant_type_next (type))
1255     count++;
1256
1257   return count;
1258 }
1259
1260 /**
1261  * g_variant_type_key:
1262  * @type: a dictionary entry #GVariantType
1263  * @returns: the key type of the dictionary entry
1264  *
1265  * Determines the key type of a dictionary entry type.
1266  *
1267  * This function may only be used with a dictionary entry type.  Other
1268  * than the additional restriction, this call is equivalent to
1269  * g_variant_type_first().
1270  *
1271  * Since 2.24
1272  **/
1273 const GVariantType *
1274 g_variant_type_key (const GVariantType *type)
1275 {
1276   const gchar *type_string;
1277
1278   g_return_val_if_fail (g_variant_type_check (type), NULL);
1279
1280   type_string = g_variant_type_peek_string (type);
1281   g_assert (type_string[0] == '{');
1282
1283   return (const GVariantType *) &type_string[1];
1284 }
1285
1286 /**
1287  * g_variant_type_value:
1288  * @type: a dictionary entry #GVariantType
1289  * @returns: the value type of the dictionary entry
1290  *
1291  * Determines the value type of a dictionary entry type.
1292  *
1293  * This function may only be used with a dictionary entry type.
1294  *
1295  * Since 2.24
1296  **/
1297 const GVariantType *
1298 g_variant_type_value (const GVariantType *type)
1299 {
1300   const gchar *type_string;
1301
1302   g_return_val_if_fail (g_variant_type_check (type), NULL);
1303
1304   type_string = g_variant_type_peek_string (type);
1305   g_assert (type_string[0] == '{');
1306
1307   return g_variant_type_next (g_variant_type_key (type));
1308 }
1309
1310 /**
1311  * g_variant_type_new_tuple:
1312  * @items: an array of #GVariantTypes, one for each item
1313  * @length: the length of @items, or -1
1314  * @returns: a new tuple #GVariantType
1315  *
1316  * Constructs a new tuple type, from @items.
1317  *
1318  * @length is the number of items in @items, or -1 to indicate that
1319  * @items is %NULL-terminated.
1320  *
1321  * It is appropriate to call g_variant_type_free() on the return value.
1322  *
1323  * Since 2.24
1324  **/
1325 static GVariantType *
1326 g_variant_type_new_tuple_slow (const GVariantType * const *items,
1327                                gint                        length)
1328 {
1329   /* the "slow" version is needed in case the static buffer of 1024
1330    * bytes is exceeded when running the normal version.  this will
1331    * happen only in truly insane code, so it can be slow.
1332    */
1333   GString *string;
1334   gsize i;
1335
1336   string = g_string_new ("(");
1337   for (i = 0; i < length; i++)
1338     {
1339       const GVariantType *type;
1340       gsize size;
1341
1342       g_return_val_if_fail (g_variant_type_check (items[i]), NULL);
1343
1344       type = items[i];
1345       size = g_variant_type_get_string_length (type);
1346       g_string_append_len (string, (const gchar *) type, size);
1347     }
1348   g_string_append_c (string, ')');
1349
1350   return (GVariantType *) g_string_free (string, FALSE);
1351 }
1352
1353 GVariantType *
1354 g_variant_type_new_tuple (const GVariantType * const *items,
1355                           gint                        length)
1356 {
1357   char buffer[1024];
1358   gsize offset;
1359   gsize i;
1360
1361   g_return_val_if_fail (length == 0 || items != NULL, NULL);
1362
1363   if (length < 0)
1364     for (length = 0; items[length] != NULL; length++);
1365
1366   offset = 0;
1367   buffer[offset++] = '(';
1368
1369   for (i = 0; i < length; i++)
1370     {
1371       const GVariantType *type;
1372       gsize size;
1373
1374       g_return_val_if_fail (g_variant_type_check (items[i]), NULL);
1375
1376       type = items[i];
1377       size = g_variant_type_get_string_length (type);
1378
1379       if (offset + size >= sizeof buffer) /* leave room for ')' */
1380         return g_variant_type_new_tuple_slow (items, length);
1381
1382       memcpy (&buffer[offset], type, size);
1383       offset += size;
1384     }
1385
1386   g_assert (offset < sizeof buffer);
1387   buffer[offset++] = ')';
1388
1389   return (GVariantType *) g_memdup (buffer, offset);
1390 }
1391
1392 /**
1393  * g_variant_type_new_array:
1394  * @element: a #GVariantType
1395  * @returns: a new array #GVariantType
1396  *
1397  * Constructs the type corresponding to an array of elements of the
1398  * type @type.
1399  *
1400  * It is appropriate to call g_variant_type_free() on the return value.
1401  *
1402  * Since 2.24
1403  **/
1404 GVariantType *
1405 g_variant_type_new_array (const GVariantType *element)
1406 {
1407   gsize size;
1408   gchar *new;
1409
1410   g_return_val_if_fail (g_variant_type_check (element), NULL);
1411
1412   size = g_variant_type_get_string_length (element);
1413   new = g_malloc (size + 1);
1414
1415   new[0] = 'a';
1416   memcpy (new + 1, element, size);
1417
1418   return (GVariantType *) new;
1419 }
1420
1421 /**
1422  * g_variant_type_new_maybe:
1423  * @element: a #GVariantType
1424  * @returns: a new maybe #GVariantType
1425  *
1426  * Constructs the type corresponding to a maybe instance containing
1427  * type @type or Nothing.
1428  *
1429  * It is appropriate to call g_variant_type_free() on the return value.
1430  *
1431  * Since 2.24
1432  **/
1433 GVariantType *
1434 g_variant_type_new_maybe (const GVariantType *element)
1435 {
1436   gsize size;
1437   gchar *new;
1438
1439   g_return_val_if_fail (g_variant_type_check (element), NULL);
1440
1441   size = g_variant_type_get_string_length (element);
1442   new = g_malloc (size + 1);
1443
1444   new[0] = 'm';
1445   memcpy (new + 1, element, size);
1446
1447   return (GVariantType *) new;
1448 }
1449
1450 /**
1451  * g_variant_type_new_dict_entry:
1452  * @key: a basic #GVariantType
1453  * @value: a #GVariantType
1454  * @returns: a new dictionary entry #GVariantType
1455  *
1456  * Constructs the type corresponding to a dictionary entry with a key
1457  * of type @key and a value of type @value.
1458  *
1459  * It is appropriate to call g_variant_type_free() on the return value.
1460  *
1461  * Since 2.24
1462  **/
1463 GVariantType *
1464 g_variant_type_new_dict_entry (const GVariantType *key,
1465                                const GVariantType *value)
1466 {
1467   gsize keysize, valsize;
1468   gchar *new;
1469
1470   g_return_val_if_fail (g_variant_type_check (key), NULL);
1471   g_return_val_if_fail (g_variant_type_check (value), NULL);
1472
1473   keysize = g_variant_type_get_string_length (key);
1474   valsize = g_variant_type_get_string_length (value);
1475
1476   new = g_malloc (1 + keysize + valsize + 1);
1477
1478   new[0] = '{';
1479   memcpy (new + 1, key, keysize);
1480   memcpy (new + 1 + keysize, value, valsize);
1481   new[1 + keysize + valsize] = '}';
1482
1483   return (GVariantType *) new;
1484 }
1485
1486 /* private */
1487 const GVariantType *
1488 g_variant_type_checked_ (const gchar *type_string)
1489 {
1490   g_return_val_if_fail (g_variant_type_string_is_valid (type_string), NULL);
1491   return (const GVariantType *) type_string;
1492 }
1493
1494 #define __G_VARIANT_TYPE_C__
1495 #include "galiasdef.c"