~ubuntu-branches/ubuntu/wily/telepathy-glib/wily

« back to all changes in this revision

Viewing changes to tools/glib-gtypes-generator.py

  • Committer: Bazaar Package Importer
  • Author(s): Simon McVittie
  • Date: 2009-03-24 22:06:52 UTC
  • mfrom: (1.3.1 upstream) (17.1.10 sid)
  • Revision ID: james.westby@ubuntu.com-20090324220652-c8dvom0nsqomp23d
Tags: 0.7.28-1
* New upstream version (ABI, API added)
* Put the -dbg package in section debug, as per recent archive changes
* Remove obsolete Conflicts/Replaces with libtelepathy-glib-static-dev, which
  was never in a stable release (and probably never in Debian at all)

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
                    ' * as the specification from which it was generated.\n'
52
52
                    ' */\n\n')
53
53
 
 
54
        # keys are e.g. 'sv', values are the key escaped
54
55
        self.need_mappings = {}
 
56
        # keys are the contents of the struct (e.g. 'sssu'), values are the
 
57
        # key escaped
55
58
        self.need_structs = {}
56
 
        self.need_arrays = {}
 
59
        # keys are the contents of the struct (e.g. 'sssu'), values are the
 
60
        # key escaped
 
61
        self.need_struct_arrays = {}
 
62
 
 
63
        # keys are the contents of the array (unlike need_struct_arrays!),
 
64
        # values are the key escaped
 
65
        self.need_other_arrays = {}
57
66
 
58
67
    def do_mapping_header(self, mapping):
59
68
        members = mapping.getElementsByTagNameNS(NS_TP, 'member')
109
118
        self.header.write('#define %s (%s ())\n\n' % (name, impl))
110
119
        self.need_mappings[impl_sig] = esc_impl_sig
111
120
 
 
121
        array_name = mapping.getAttribute('array-name')
 
122
        if array_name:
 
123
            gtype_name = self.PREFIX_ + 'ARRAY_TYPE_' + array_name.upper()
 
124
            contents_sig = 'a{' + impl_sig + '}'
 
125
            esc_contents_sig = escape_as_identifier(contents_sig)
 
126
            impl = self.prefix_ + 'type_dbus_array_of_' + esc_contents_sig
 
127
            self.header.write('/**\n * %s:\n\n' % gtype_name)
 
128
            self.header.write(' * Expands to a call to a function\n')
 
129
            self.header.write(' * that returns the #GType of a #GPtrArray\n')
 
130
            self.header.write(' * of #%s.\n' % name)
 
131
            self.header.write(' */\n')
 
132
            self.header.write('#define %s (%s ())\n\n' % (gtype_name, impl))
 
133
            self.need_other_arrays[contents_sig] = esc_contents_sig
 
134
 
112
135
    def do_struct_header(self, struct):
113
136
        members = struct.getElementsByTagNameNS(NS_TP, 'member')
114
137
        impl_sig = ''.join([elt.getAttribute('type') for elt in members])
164
187
            self.header.write(' * of #%s.\n' % name)
165
188
            self.header.write(' */\n')
166
189
            self.header.write('#define %s (%s ())\n\n' % (array_name, impl))
167
 
            self.need_arrays[impl_sig] = esc_impl_sig
 
190
            self.need_struct_arrays[impl_sig] = esc_impl_sig
168
191
 
169
192
        self.need_structs[impl_sig] = esc_impl_sig
170
193
 
209
232
            self.body.write('  return t;\n')
210
233
            self.body.write('}\n\n')
211
234
 
212
 
        for sig in self.need_arrays:
 
235
        for sig in self.need_struct_arrays:
213
236
            self.header.write('GType %stype_dbus_array_%s (void);\n\n' %
214
 
                              (self.prefix_, self.need_structs[sig]))
 
237
                              (self.prefix_, self.need_struct_arrays[sig]))
215
238
            self.body.write('GType\n%stype_dbus_array_%s (void)\n{\n' %
216
 
                              (self.prefix_, self.need_structs[sig]))
 
239
                              (self.prefix_, self.need_struct_arrays[sig]))
217
240
            self.body.write('  static GType t = 0;\n\n')
218
241
            self.body.write('  if (G_UNLIKELY (t == 0))\n')
219
242
            self.body.write('    t = dbus_g_type_get_collection ("GPtrArray", '
220
243
                            '%stype_dbus_struct_%s ());\n' %
221
 
                            (self.prefix_, self.need_structs[sig]))
 
244
                            (self.prefix_, self.need_struct_arrays[sig]))
 
245
            self.body.write('  return t;\n')
 
246
            self.body.write('}\n\n')
 
247
 
 
248
        for sig in self.need_other_arrays:
 
249
            self.header.write('GType %stype_dbus_array_of_%s (void);\n\n' %
 
250
                              (self.prefix_, self.need_other_arrays[sig]))
 
251
            self.body.write('GType\n%stype_dbus_array_of_%s (void)\n{\n' %
 
252
                              (self.prefix_, self.need_other_arrays[sig]))
 
253
            self.body.write('  static GType t = 0;\n\n')
 
254
            self.body.write('  if (G_UNLIKELY (t == 0))\n')
 
255
 
 
256
            if sig[:2] == 'a{' and sig[-1:] == '}':
 
257
                # array of mappings
 
258
                self.body.write('    t = dbus_g_type_get_collection ('
 
259
                            '"GPtrArray", '
 
260
                            '%stype_dbus_hash_%s ());\n' %
 
261
                            (self.prefix_, escape_as_identifier(sig[2:-1])))
 
262
            elif sig[:2] == 'a(' and sig[-1:] == ')':
 
263
                # array of arrays of struct
 
264
                self.body.write('    t = dbus_g_type_get_collection ('
 
265
                            '"GPtrArray", '
 
266
                            '%stype_dbus_array_%s ());\n' %
 
267
                            (self.prefix_, escape_as_identifier(sig[2:-1])))
 
268
            elif sig[:1] == 'a':
 
269
                # array of arrays of non-struct
 
270
                self.body.write('    t = dbus_g_type_get_collection ('
 
271
                            '"GPtrArray", '
 
272
                            '%stype_dbus_array_of_%s ());\n' %
 
273
                            (self.prefix_, escape_as_identifier(sig[1:])))
 
274
            else:
 
275
                raise AssertionError("array of '%s' not supported" % sig)
 
276
 
222
277
            self.body.write('  return t;\n')
223
278
            self.body.write('}\n\n')
224
279