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