1 // Generated by gmmproc 2.64.2 -- DO NOT MODIFY!
2
3
4 #include <glibmm.h>
5
6 #include <glibmm/varianttype.h>
7 #include <glibmm/private/varianttype_p.h>
8
9
10 /* Copyright 2010 The glibmm Development Team
11 *
12 * This library is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public
14 * License as published by the Free Software Foundation; either
15 * version 2.1 of the License, or (at your option) any later version.
16 *
17 * This library is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
21 *
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
24 */
25
26 #include <glibmm/varianttype.h>
27 #include <glibmm/utility.h>
28 #include <glib.h>
29
30 namespace Glib
31 {
32
VariantType(const GVariantType * castitem)33 VariantType::VariantType(const GVariantType* castitem)
34 {
35 if (castitem)
36 gobject_ = g_variant_type_copy(castitem);
37 else
38 gobject_ = nullptr;
39 }
40
VariantType(const std::string & type_string)41 VariantType::VariantType(const std::string& type_string)
42 : gobject_(g_variant_type_new(type_string.c_str()))
43 {
44 }
45
46 VariantType&
operator =(const GVariantType * castitem)47 VariantType::operator=(const GVariantType* castitem)
48 {
49 if (gobject_)
50 {
51 g_variant_type_free(gobject_);
52 }
53
54 if (castitem)
55 gobject_ = g_variant_type_copy(castitem);
56 else
57 gobject_ = nullptr;
58
59 return *this;
60 }
61
62 VariantType
create_tuple(const std::vector<VariantType> & items)63 VariantType::create_tuple(const std::vector<VariantType>& items)
64 {
65 using var_ptr = GVariantType*;
66 const auto var_array = new var_ptr[items.size()];
67
68 for (std::vector<VariantType>::size_type i = 0; i < items.size(); i++)
69 {
70 var_array[i] = const_cast<GVariantType*>(items[i].gobj());
71 }
72
73 auto result = Glib::wrap(g_variant_type_new_tuple(var_array, items.size()));
74 delete[] var_array;
75 return result;
76 }
77
78 const VariantType VARIANT_TYPE_BOOL(G_VARIANT_TYPE_BOOLEAN);
79
80 const VariantType VARIANT_TYPE_BYTE(G_VARIANT_TYPE_BYTE);
81
82 const VariantType VARIANT_TYPE_INT16(G_VARIANT_TYPE_INT16);
83
84 const VariantType VARIANT_TYPE_UINT16(G_VARIANT_TYPE_UINT16);
85
86 const VariantType VARIANT_TYPE_INT32(G_VARIANT_TYPE_INT32);
87
88 const VariantType VARIANT_TYPE_UINT32(G_VARIANT_TYPE_UINT32);
89
90 const VariantType VARIANT_TYPE_INT64(G_VARIANT_TYPE_INT64);
91
92 const VariantType VARIANT_TYPE_UINT64(G_VARIANT_TYPE_UINT64);
93
94 const VariantType VARIANT_TYPE_DOUBLE(G_VARIANT_TYPE_DOUBLE);
95
96 const VariantType VARIANT_TYPE_STRING(G_VARIANT_TYPE_STRING);
97
98 const VariantType VARIANT_TYPE_OBJECT_PATH(G_VARIANT_TYPE_OBJECT_PATH);
99
100 const VariantType VARIANT_TYPE_SIGNATURE(G_VARIANT_TYPE_SIGNATURE);
101
102 const VariantType VARIANT_TYPE_VARIANT(G_VARIANT_TYPE_VARIANT);
103
104 const VariantType VARIANT_TYPE_HANDLE(G_VARIANT_TYPE_HANDLE);
105
106 const VariantType VARIANT_TYPE_UNIT(G_VARIANT_TYPE_UNIT);
107
108 const VariantType VARIANT_TYPE_ANY(G_VARIANT_TYPE_ANY);
109
110 const VariantType VARIANT_TYPE_BASIC(G_VARIANT_TYPE_BASIC);
111
112 const VariantType VARIANT_TYPE_MAYBE(G_VARIANT_TYPE_MAYBE);
113
114 const VariantType VARIANT_TYPE_ARRAY(G_VARIANT_TYPE_ARRAY);
115
116 const VariantType VARIANT_TYPE_TUPLE(G_VARIANT_TYPE_TUPLE);
117
118 const VariantType VARIANT_TYPE_DICT_ENTRY(G_VARIANT_TYPE_DICT_ENTRY);
119
120 const VariantType VARIANT_TYPE_DICTIONARY(G_VARIANT_TYPE_DICTIONARY);
121
122 const VariantType VARIANT_TYPE_STRING_ARRAY(G_VARIANT_TYPE_STRING_ARRAY);
123
124 const VariantType VARIANT_TYPE_OBJECT_PATH_ARRAY(G_VARIANT_TYPE_OBJECT_PATH_ARRAY);
125
126 const VariantType VARIANT_TYPE_BYTESTRING(G_VARIANT_TYPE_BYTESTRING);
127
128 const VariantType VARIANT_TYPE_BYTESTRING_ARRAY(G_VARIANT_TYPE_BYTESTRING_ARRAY);
129
130 std::string
get_string() const131 VariantType::get_string() const
132 {
133 return std::string(g_variant_type_peek_string(gobj()), g_variant_type_get_string_length(gobj()));
134 }
135
get_item_types() const136 std::vector<VariantType> VariantType::get_item_types() const
137 {
138 std::vector<VariantType> result;
139 auto next_item_type = g_variant_type_first(gobj());
140 while (next_item_type)
141 {
142 result.emplace_back(const_cast<GVariantType*>(next_item_type), true);
143 next_item_type = g_variant_type_next(next_item_type);
144 }
145 return result;
146 }
147
148 // Glib::Value<Glib::VariantType>
value_type()149 GType Value<VariantType>::value_type()
150 {
151 // The type function is *not* called g_variant_type_get_type().
152 // Use the macro in order to avoid using the non-standard function name here.
153 return G_TYPE_VARIANT_TYPE;
154 }
155
set(const CppType & data)156 void Value<VariantType>::set(const CppType& data)
157 {
158 set_boxed(data.gobj());
159 }
160
get() const161 Value<VariantType>::CppType Value<VariantType>::get() const
162 {
163 return Glib::wrap(static_cast<CType>(get_boxed()), true);
164 }
165
166 } // namespace GLib
167
168 namespace
169 {
170 } // anonymous namespace
171
172
173 namespace Glib
174 {
175
wrap(GVariantType * object,bool take_copy)176 Glib::VariantType wrap(GVariantType* object, bool take_copy /* = false */)
177 {
178 return Glib::VariantType(object, take_copy);
179 }
180
181 } // namespace Glib
182
183
184 namespace Glib
185 {
186
187
VariantType()188 VariantType::VariantType()
189 :
190 gobject_ (nullptr) // Allows creation of invalid wrapper, e.g. for output arguments to methods.
191 {}
192
VariantType(const VariantType & src)193 VariantType::VariantType(const VariantType& src)
194 :
195 gobject_ ((src.gobject_) ? g_variant_type_copy(src.gobject_) : nullptr)
196 {}
197
VariantType(GVariantType * castitem,bool make_a_copy)198 VariantType::VariantType(GVariantType* castitem, bool make_a_copy /* = false */)
199 {
200 if(!make_a_copy)
201 {
202 // It was given to us by a function which has already made a copy for us to keep.
203 gobject_ = castitem;
204 }
205 else
206 {
207 // We are probably getting it via direct access to a struct,
208 // so we can not just take it - we have to take a copy of it.
209 if(castitem)
210 gobject_ = g_variant_type_copy(castitem);
211 else
212 gobject_ = nullptr;
213 }
214 }
215
216
operator =(const VariantType & src)217 VariantType& VariantType::operator=(const VariantType& src)
218 {
219 const auto new_gobject = (src.gobject_) ? g_variant_type_copy(src.gobject_) : nullptr;
220
221 if(gobject_)
222 g_variant_type_free(gobject_);
223
224 gobject_ = new_gobject;
225
226 return *this;
227 }
228
VariantType(VariantType && other)229 VariantType::VariantType(VariantType&& other) noexcept
230 :
231 gobject_(other.gobject_)
232 {
233 other.gobject_ = nullptr;
234 }
235
operator =(VariantType && other)236 VariantType& VariantType::operator=(VariantType&& other) noexcept
237 {
238 VariantType temp (other);
239 swap(temp);
240 return *this;
241 }
242
~VariantType()243 VariantType::~VariantType() noexcept
244 {
245 if(gobject_)
246 g_variant_type_free(gobject_);
247 }
248
swap(VariantType & other)249 void VariantType::swap(VariantType& other) noexcept
250 {
251 std::swap(gobject_, other.gobject_);
252 }
253
gobj_copy() const254 GVariantType* VariantType::gobj_copy() const
255 {
256 return g_variant_type_copy(gobject_);
257 }
258
259
create_array(const VariantType & element)260 VariantType VariantType::create_array(const VariantType& element)
261 {
262 return Glib::wrap(g_variant_type_new_array((element).gobj()));
263 }
264
create_maybe(const VariantType & element)265 VariantType VariantType::create_maybe(const VariantType& element)
266 {
267 return Glib::wrap(g_variant_type_new_maybe((element).gobj()));
268 }
269
create_dict_entry(const VariantType & key,const VariantType & value)270 VariantType VariantType::create_dict_entry(const VariantType& key, const VariantType& value)
271 {
272 return Glib::wrap(g_variant_type_new_dict_entry((key).gobj(), (value).gobj()));
273 }
274
_get_string_length() const275 gsize VariantType::_get_string_length() const
276 {
277 return g_variant_type_get_string_length(const_cast<GVariantType*>(gobj()));
278 }
279
is_definite() const280 bool VariantType::is_definite() const
281 {
282 return g_variant_type_is_definite(const_cast<GVariantType*>(gobj()));
283 }
284
is_container() const285 bool VariantType::is_container() const
286 {
287 return g_variant_type_is_container(const_cast<GVariantType*>(gobj()));
288 }
289
is_basic() const290 bool VariantType::is_basic() const
291 {
292 return g_variant_type_is_basic(const_cast<GVariantType*>(gobj()));
293 }
294
is_maybe() const295 bool VariantType::is_maybe() const
296 {
297 return g_variant_type_is_maybe(const_cast<GVariantType*>(gobj()));
298 }
299
is_array() const300 bool VariantType::is_array() const
301 {
302 return g_variant_type_is_array(const_cast<GVariantType*>(gobj()));
303 }
304
is_tuple() const305 bool VariantType::is_tuple() const
306 {
307 return g_variant_type_is_tuple(const_cast<GVariantType*>(gobj()));
308 }
309
is_dict_entry() const310 bool VariantType::is_dict_entry() const
311 {
312 return g_variant_type_is_dict_entry(const_cast<GVariantType*>(gobj()));
313 }
314
is_variant() const315 bool VariantType::is_variant() const
316 {
317 return g_variant_type_is_variant(const_cast<GVariantType*>(gobj()));
318 }
319
hash() const320 guint VariantType::hash() const
321 {
322 return g_variant_type_hash(const_cast<GVariantType*>(gobj()));
323 }
324
equal(const VariantType & other) const325 bool VariantType::equal(const VariantType& other) const
326 {
327 return g_variant_type_equal(const_cast<GVariantType*>(gobj()), const_cast<GVariantType*>((other).gobj()));
328 }
329
is_subtype_of(const VariantType & supertype) const330 bool VariantType::is_subtype_of(const VariantType& supertype) const
331 {
332 return g_variant_type_is_subtype_of(const_cast<GVariantType*>(gobj()), (supertype).gobj());
333 }
334
element() const335 VariantType VariantType::element() const
336 {
337 return Glib::wrap(const_cast<GVariantType*>(g_variant_type_element(const_cast<GVariantType*>(gobj()))), true);
338 }
339
340 #ifndef GLIBMM_DISABLE_DEPRECATED
341 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
first() const342 VariantType VariantType::first() const
343 {
344 return Glib::wrap(const_cast<GVariantType*>(g_variant_type_first(const_cast<GVariantType*>(gobj()))), true);
345 }
346 G_GNUC_END_IGNORE_DEPRECATIONS
347 #endif // GLIBMM_DISABLE_DEPRECATED
348
349 #ifndef GLIBMM_DISABLE_DEPRECATED
350 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
next() const351 VariantType VariantType::next() const
352 {
353 return Glib::wrap(const_cast<GVariantType*>(g_variant_type_next(const_cast<GVariantType*>(gobj()))), true);
354 }
355 G_GNUC_END_IGNORE_DEPRECATIONS
356 #endif // GLIBMM_DISABLE_DEPRECATED
357
n_items() const358 gsize VariantType::n_items() const
359 {
360 return g_variant_type_n_items(const_cast<GVariantType*>(gobj()));
361 }
362
key() const363 VariantType VariantType::key() const
364 {
365 return Glib::wrap(const_cast<GVariantType*>(g_variant_type_key(const_cast<GVariantType*>(gobj()))), true);
366 }
367
value() const368 VariantType VariantType::value() const
369 {
370 return Glib::wrap(const_cast<GVariantType*>(g_variant_type_value(const_cast<GVariantType*>(gobj()))), true);
371 }
372
373
374 } // namespace Glib
375
376
377