23 #ifndef JSONSERIALIZE_H_
24 #define JSONSERIALIZE_H_
25 #include "XmlParser.h"
43 #include "DateFormat.h"
44 #include "BinaryData.h"
45 #include "Constants.h"
46 #include "AMEFResources.h"
50 static string demangle(
const char *mangled);
51 static string getClassName(
void* instance);
52 static string _handleAllSerialization(
string className,
void *t);
53 static void* _handleAllUnSerialization(
string json,
string className);
54 static string _ser(
void* t,
string classN);
55 static string _serContainers(
void* t,
string classN,
string type);
56 static string _ser(
Object);
57 static void* _unser(
string json,
string classN);
58 static void* unserializeConatiner(
string json,
string className,
string type);
60 static void* _unserCont(
string json,
string className,
string type);
62 template <
class T>
static string serializevec(vector<T> t)
67 const char *mangled =
typeid(td).name();
68 string className = demangle(mangled);
70 while(cnt++<(
int)t.size())
72 json += serialize<T>(*st.begin());
73 if(cnt!=(
int)t.size())
81 template <
class T>
static string serializelist(list<T> t)
86 const char *mangled =
typeid(td).name();
87 string className = demangle(mangled);
89 while(cnt++<(
int)t.size())
91 json += serialize<T>(*st.begin());
92 if(cnt!=(
int)t.size())
100 template <
class T>
static string serializeset(set<T> t)
105 const char *mangled =
typeid(td).name();
106 string className = demangle(mangled);
108 while(cnt++<(
int)t.size())
110 json += serialize<T>(*st.begin());
111 if(cnt!=(
int)t.size())
113 st.erase(st.begin());
119 template <
class T>
static string serializemultiset(multiset<T> t)
124 const char *mangled =
typeid(td).name();
125 string className = demangle(mangled);
127 while(cnt++<(
int)t.size())
129 json += serialize<T>(*st.begin());
130 if(cnt!=(
int)t.size())
132 st.erase(st.begin());
138 template <
class T>
static string serializeq(std::queue<T> t)
140 std::queue<T> st = t;
143 const char *mangled =
typeid(td).name();
144 string className = demangle(mangled);
146 while(cnt++<(
int)t.size())
148 json += serialize<T>(st.front());
149 if(cnt!=(
int)t.size())
157 template <
class T>
static string serializedq(deque<T> t)
162 const char *mangled =
typeid(td).name();
163 string className = demangle(mangled);
165 while(cnt++<(
int)t.size())
167 json += serialize<T>(*st.begin());
168 if(cnt!=(
int)t.size())
170 st.erase(st.begin());
176 template <
class T>
static void* unserContainer(vector<T> &t,
string type)
180 list<T>* tt =
new list<T>;
181 std::copy(t.begin(), t.end(), std::back_inserter(*tt));
186 set<T>* tt =
new set<T>;
187 std::copy(t.begin(), t.end(), std::inserter(*tt, tt->begin()));
190 else if(type==
"MulSet")
192 multiset<T>* tt =
new multiset<T>;
193 std::copy(t.begin(), t.end(), std::inserter(*tt, tt->begin()));
198 deque<T>* tt =
new deque<T>;
199 std::copy(t.begin(), t.end(), std::inserter(*tt, tt->begin()));
204 std::queue<T>* qq =
new std::queue<T>;
205 for (
int var = 0; var < (int)t.size(); ++var) {
218 template <
class T>
static string serialize(T t)
221 const char *mangled =
typeid(t).name();
222 string className = demangle(mangled);
223 return _handleAllSerialization(className,&t);
226 static string serializeObject(
Object t)
228 return _handleAllSerialization(t.getTypeName(),t.getVoidPointer());
230 static string serializeUnknown(
void* t,
string className)
232 return _handleAllSerialization(className,t);
235 template <
class K,
class V>
static string serialize(map<K,V> mp)
241 while (cnt++<mp.size())
244 json += serialize<K>(mpt.begin()->first);
245 json +=
",\"value\":";
246 json += serialize<V>(mpt.begin()->second);
247 mpt.erase(mpt.begin());
249 if(cnt!=(
int)mp.size())
255 template <
class K,
class V>
static string serialize(multimap<K,V> mp)
257 multimap<K,V> mpt = mp;
261 while (cnt++<mp.size())
264 json += serialize<K>(mpt.begin()->first);
265 json +=
",\"value\":";
266 json += serialize<V>(mpt.begin()->second);
267 mpt.erase(mpt.begin());
269 if(cnt!=(
int)mp.size())
276 template <
class T>
static T unserialize(
string json)
279 const char *mangled =
typeid(t).name();
280 string className = demangle(mangled);
281 return *(T*)_handleAllUnSerialization(json,className);
283 static void* unSerializeUnknown(
string json,
string className)
285 return _handleAllUnSerialization(json,className);