~sethj/ubuntu/wily/unity/fix-for-1445595

« back to all changes in this revision

Viewing changes to UnityCore/Variant.cpp

Variant: add constructor and assigment operator for creating new from HintsMap

Show diffs side-by-side

added added

removed removed

Lines of Context:
96
96
  : Variant(static_cast<double>(value))
97
97
{}
98
98
 
 
99
Variant::Variant(HintsMap const& hints)
 
100
{
 
101
  GVariantBuilder b;
 
102
  g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
 
103
 
 
104
  for (auto const& hint : hints)
 
105
    g_variant_builder_add(&b, "{sv}", hint.first.c_str(), static_cast<GVariant*>(hint.second));
 
106
 
 
107
  variant_ = g_variant_builder_end(&b);
 
108
  g_variant_ref_sink(variant_);
 
109
}
 
110
 
99
111
Variant::~Variant()
100
112
{
101
113
  if (variant_) g_variant_unref(variant_);
276
288
  return true;
277
289
}
278
290
 
279
 
Variant Variant::FromHints(HintsMap const& hints)
280
 
{
281
 
  GVariantBuilder b;
282
 
  g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
283
 
 
284
 
  for (glib::HintsMap::const_iterator it = hints.begin(); it != hints.end(); ++it)
285
 
  {
286
 
    const gchar* key = it->first.c_str();
287
 
    GVariant* ptr = it->second;
288
 
 
289
 
    g_variant_builder_add(&b, "{sv}", key, ptr);
290
 
  }
291
 
 
292
 
  return g_variant_builder_end(&b);
293
 
}
294
 
 
295
291
void Variant::swap(Variant& other)
296
292
{
297
293
  std::swap(this->variant_, other.variant_);
313
309
}
314
310
 
315
311
Variant& Variant::operator=(std::nullptr_t) { return operator=(Variant()); }
 
312
Variant& Variant::operator=(HintsMap const& map) { return operator=(Variant(map)); }
316
313
Variant& Variant::operator=(std::string const& value) { return operator=(Variant(value)); }
317
314
Variant& Variant::operator=(const char* value) { return operator=(Variant(value)); }
318
315
Variant& Variant::operator=(unsigned char value) { return operator=(Variant(value)); }