Changeset View
Changeset View
Standalone View
Standalone View
tools/libglibcodegen.py
Show First 20 Lines • Show All 148 Lines • ▼ Show 20 Line(s) | 148 | elif s == 'ao': #object path array | |||
---|---|---|---|---|---|
149 | return ("GPtrArray *", | 149 | return ("GPtrArray *", | ||
150 | 'dbus_g_type_get_collection ("GPtrArray",' | 150 | 'dbus_g_type_get_collection ("GPtrArray",' | ||
151 | ' DBUS_TYPE_G_OBJECT_PATH)', | 151 | ' DBUS_TYPE_G_OBJECT_PATH)', | ||
152 | "BOXED", True) | 152 | "BOXED", True) | ||
153 | elif s == 'a{ss}': #hash table of string to string | 153 | elif s == 'a{ss}': #hash table of string to string | ||
154 | return ("GHashTable *", "DBUS_TYPE_G_STRING_STRING_HASHTABLE", "BOXED", False) | 154 | return ("GHashTable *", "DBUS_TYPE_G_STRING_STRING_HASHTABLE", "BOXED", False) | ||
155 | elif s[:2] == 'a{': #some arbitrary hash tables | 155 | elif s[:2] == 'a{': #some arbitrary hash tables | ||
156 | if s[2] not in ('y', 'b', 'n', 'q', 'i', 'u', 's', 'o', 'g'): | 156 | if s[2] not in ('y', 'b', 'n', 'q', 'i', 'u', 's', 'o', 'g'): | ||
157 | raise Exception, "can't index a hashtable off non-basic type " + s | 157 | raise Exception("can't index a hashtable off non-basic type " + s) | ||
158 | first = type_to_gtype(s[2]) | 158 | first = type_to_gtype(s[2]) | ||
159 | second = type_to_gtype(s[3:-1]) | 159 | second = type_to_gtype(s[3:-1]) | ||
160 | return ("GHashTable *", "(dbus_g_type_get_map (\"GHashTable\", " + first[1] + ", " + second[1] + "))", "BOXED", False) | 160 | return ("GHashTable *", "(dbus_g_type_get_map (\"GHashTable\", " + first[1] + ", " + second[1] + "))", "BOXED", False) | ||
161 | elif s[:2] in ('a(', 'aa'): # array of structs or arrays, recurse | 161 | elif s[:2] in ('a(', 'aa'): # array of structs or arrays, recurse | ||
162 | gtype = type_to_gtype(s[1:])[1] | 162 | gtype = type_to_gtype(s[1:])[1] | ||
163 | return ("GPtrArray *", "(dbus_g_type_get_collection (\"GPtrArray\", "+gtype+"))", "BOXED", True) | 163 | return ("GPtrArray *", "(dbus_g_type_get_collection (\"GPtrArray\", "+gtype+"))", "BOXED", True) | ||
164 | elif s[:1] == '(': #struct | 164 | elif s[:1] == '(': #struct | ||
165 | gtype = "(dbus_g_type_get_struct (\"GValueArray\", " | 165 | gtype = "(dbus_g_type_get_struct (\"GValueArray\", " | ||
166 | for subsig in Signature(s[1:-1]): | 166 | for subsig in Signature(s[1:-1]): | ||
167 | gtype = gtype + type_to_gtype(subsig)[1] + ", " | 167 | gtype = gtype + type_to_gtype(subsig)[1] + ", " | ||
168 | gtype = gtype + "G_TYPE_INVALID))" | 168 | gtype = gtype + "G_TYPE_INVALID))" | ||
169 | return ("GValueArray *", gtype, "BOXED", True) | 169 | return ("GValueArray *", gtype, "BOXED", True) | ||
170 | 170 | | |||
171 | # we just don't know .. | 171 | # we just don't know .. | ||
172 | raise Exception, "don't know the GType for " + s | 172 | raise Exception("don't know the GType for " + s) | ||
173 | | ||||
174 | def move_into_gvalue(gvaluep, gtype, marshaller, name): | ||||
175 | if gtype == 'G_TYPE_STRING': | ||||
176 | return 'g_value_take_string (%s, %s);' % (gvaluep, name) | ||||
177 | elif marshaller == 'BOXED': | ||||
178 | return 'g_value_take_boxed (%s, %s);' % (gvaluep, name) | ||||
179 | elif gtype == 'G_TYPE_UCHAR': | ||||
180 | return 'g_value_set_uchar (%s, %s);' % (gvaluep, name) | ||||
181 | elif gtype == 'G_TYPE_BOOLEAN': | ||||
182 | return 'g_value_set_boolean (%s, %s);' % (gvaluep, name) | ||||
183 | elif gtype == 'G_TYPE_INT': | ||||
184 | return 'g_value_set_int (%s, %s);' % (gvaluep, name) | ||||
185 | elif gtype == 'G_TYPE_UINT': | ||||
186 | return 'g_value_set_uint (%s, %s);' % (gvaluep, name) | ||||
187 | elif gtype == 'G_TYPE_INT64': | ||||
188 | return 'g_value_set_int (%s, %s);' % (gvaluep, name) | ||||
189 | elif gtype == 'G_TYPE_UINT64': | ||||
190 | return 'g_value_set_uint64 (%s, %s);' % (gvaluep, name) | ||||
191 | elif gtype == 'G_TYPE_DOUBLE': | ||||
192 | return 'g_value_set_double (%s, %s);' % (gvaluep, name) | ||||
193 | else: | ||||
194 | raise AssertionError("Don't know how to put %s in a GValue" % gtype) | ||||
195 | | ||||
196 | def copy_into_gvalue(gvaluep, gtype, marshaller, name): | ||||
197 | if gtype == 'G_TYPE_STRING': | ||||
198 | return 'g_value_set_string (%s, %s);' % (gvaluep, name) | ||||
199 | elif marshaller == 'BOXED': | ||||
200 | return 'g_value_set_boxed (%s, %s);' % (gvaluep, name) | ||||
201 | elif gtype == 'G_TYPE_UCHAR': | ||||
202 | return 'g_value_set_uchar (%s, %s);' % (gvaluep, name) | ||||
203 | elif gtype == 'G_TYPE_BOOLEAN': | ||||
204 | return 'g_value_set_boolean (%s, %s);' % (gvaluep, name) | ||||
205 | elif gtype == 'G_TYPE_INT': | ||||
206 | return 'g_value_set_int (%s, %s);' % (gvaluep, name) | ||||
207 | elif gtype == 'G_TYPE_UINT': | ||||
208 | return 'g_value_set_uint (%s, %s);' % (gvaluep, name) | ||||
209 | elif gtype == 'G_TYPE_INT64': | ||||
210 | return 'g_value_set_int (%s, %s);' % (gvaluep, name) | ||||
211 | elif gtype == 'G_TYPE_UINT64': | ||||
212 | return 'g_value_set_uint64 (%s, %s);' % (gvaluep, name) | ||||
213 | elif gtype == 'G_TYPE_DOUBLE': | ||||
214 | return 'g_value_set_double (%s, %s);' % (gvaluep, name) | ||||
215 | else: | ||||
216 | raise AssertionError("Don't know how to put %s in a GValue" % gtype) |