1 #ifndef _MAPPROPERTYTYPE_H_
2 #define _MAPPROPERTYTYPE_H_
5 #include "abstractpropertytype.h"
8 //#include <json-glib/json-glib.h>
10 template <class T, class N>
11 class MapPropertyType: public AbstractPropertyType
16 void append(T key, N value)
18 appendPriv(key,value);
21 AbstractPropertyType* copy()
23 MapPropertyType<T,N> *t = new MapPropertyType<T,N>();
30 std::string toString() const
32 std::stringstream str;
36 for(auto itr = mMap.begin(); itr != mMap.end(); itr++)
43 str <<"'"<< t.first.toString() <<"':'"<<t.second.toString()<<"'";
51 void fromString(std::string str)
53 json_object *rootobject;
54 json_tokener *tokener = json_tokener_new();
55 enum json_tokener_error err;
58 rootobject = json_tokener_parse_ex(tokener, str.c_str(),str.length());
59 } while ((err = json_tokener_get_error(tokener)) == json_tokener_continue);
60 if (err != json_tokener_success)
62 fprintf(stderr, "Error: %s\n", json_tokener_error_desc(err));
63 // Handle errors, as appropriate for your application.
65 if (tokener->char_offset < str.length()) // XXX shouldn't access internal fields
67 // Handle extra characters after parsed object as desired.
68 // e.g. issue an error, parse another object from that point, etc...
72 json_object_object_foreach(rootobject, key, val)
75 N two(json_object_get_string(val));
79 json_object_put(rootobject);
81 DebugOut()<<"Config members: "<<json_reader_count_members(reader)<<endl;
83 gchar** srcMembers = json_reader_list_members(reader);
85 for(int i=0; i< json_reader_count_members(reader); i++)
87 json_reader_read_member(reader,srcMembers[i]);
89 N two(json_reader_get_string_value(reader));
92 json_reader_end_member(reader);
96 g_object_unref(reader);
97 g_object_unref(parser);*/
100 GVariant* toVariant()
102 GVariantBuilder params;
103 g_variant_builder_init(¶ms, G_VARIANT_TYPE_DICTIONARY);
105 for(auto itr = mMap.begin(); itr != mMap.end(); itr++)
107 GVariant **v = g_new(GVariant*,2);
108 auto &foo = (*itr).first;
109 v[0] = const_cast<T&>(foo).toVariant();
110 v[1] = (*itr).second.toVariant();
111 GVariant* tuple = g_variant_new_tuple(v,2);
113 g_variant_builder_add_value(¶ms,tuple);
118 GVariant* var = g_variant_builder_end(¶ms);
123 void fromVariant(GVariant*)
128 void setMap(std::map<T, N> m)
135 void appendPriv(T key, N value)