16 #ifndef XMLSERIALIZABLE_H_
17 #define XMLSERIALIZABLE_H_
18 #include "XmlParser.h"
35 #include "DateFormat.h"
36 #include "BinaryData.h"
37 #include "Constants.h"
38 #include "AMEFResources.h"
42 typedef string (*SerPtr) (
void*);
43 typedef void* (*UnSerPtr) (string);
46 static string demangle(
const char *mangled);
47 static string getClassName(
void* instance);
48 static string _handleAllSerialization(
string className,
void *t);
49 static void* _handleAllUnSerialization(
string objXml,
string className);
50 static string _ser(
void* t,
string classN);
51 static string _servec(
void* t,
string classN);
52 static string _serlis(
void* t,
string classN);
53 static string _serset(
void* t,
string classN);
54 static string _sermultiset(
void* t,
string classN);
55 static string _serq(
void* t,
string classN);
56 static string _serdq(
void* t,
string classN);
57 static string _ser(
Object);
58 static void* _unser(
string objXml,
string classN);
59 static void* unserializevec(
string objXml);
60 static void* unserializelist(
string objXml);
61 static void* unserializeset(
string objXml);
62 static void* unserializemultiset(
string objXml);
63 static void* unserializeq(
string objXml);
64 static void* unserializedq(
string objXml);
66 static void* _unserVec(
string objXml,
string className);
67 static void* _unserLis(
string objXml,
string className);
68 static void* _unserQ(
string objXml,
string className);
69 static void* _unserDq(
string objXml,
string className);
70 static void* _unserSet(
string objXml,
string className);
71 static void* _unserMulSet(
string objXml,
string className);
73 template <
class T>
static string serializeset(set<T> t)
78 const char *mangled =
typeid(td).name();
79 string className = demangle(mangled);
80 string objXml =
"<set-"+className+
">";
81 while(cnt++<(
int)t.size())
83 objXml += serialize<T>(*st.begin());
86 objXml +=
"</set-"+className+
">";
90 template <
class T>
static string serializemultiset(multiset<T> t)
95 const char *mangled =
typeid(td).name();
96 string className = demangle(mangled);
97 string objXml =
"<multiset-"+className+
">";
98 while(cnt++<(
int)t.size())
100 objXml += serialize<T>(*st.begin());
101 st.erase(st.begin());
103 objXml +=
"</multiset-"+className+
">";
107 template <
class T>
static string serializevec(vector<T> t)
112 const char *mangled =
typeid(td).name();
113 string className = demangle(mangled);
114 string objXml =
"<vector-"+className+
">";
115 while(cnt++<(
int)t.size())
117 objXml += serialize<T>(*st.begin());
118 st.erase(st.begin());
120 objXml +=
"</vector-"+className+
">";
123 template <
class T>
static string serializedq(deque<T> t)
128 const char *mangled =
typeid(td).name();
129 string className = demangle(mangled);
130 string objXml =
"<deque-"+className+
">";
131 while(cnt++<(
int)t.size())
133 objXml += serialize<T>(*st.begin());
134 st.erase(st.begin());
136 objXml +=
"</deque-"+className+
">";
139 template <
class T>
static string serializelist(list<T> t)
144 const char *mangled =
typeid(td).name();
145 string className = demangle(mangled);
146 list<string>::iterator it;
147 string objXml =
"<list-"+className+
">";
148 while(cnt++<(
int)t.size())
150 objXml += serialize<T>(*st.begin());
151 st.erase(st.begin());
153 objXml +=
"</list-"+className+
">";
156 template <
class T>
static string serializeq(std::queue<T> t)
158 std::queue<T> tt = t;
160 const char *mangled =
typeid(td).name();
161 string className = demangle(mangled);
162 string objXml =
"<queue-"+className+
">";
165 for(
int var=0;var<(int)tt.size();var++)
167 objXml += serialize<T>(tt.front());
171 objXml +=
"</queue-"+className+
">";
179 template <
class T>
static string serialize(T t)
182 const char *mangled =
typeid(t).name();
183 string className = demangle(mangled);
184 return _handleAllSerialization(className,&t);
187 static string serializeObject(
Object t)
189 return _handleAllSerialization(t.getTypeName(),t.getVoidPointer());
191 static string serializeUnknown(
void* t,
string className)
193 return _handleAllSerialization(className,t);
196 template <
class K,
class V>
static string serialize(map<K,V> mp)
201 while (mpt.begin()!=mpt.end())
204 objXml += serialize<K>(mpt.begin()->first);
205 objXml += serialize<V>(mpt.begin()->second);
206 mpt.erase(mpt.begin());
212 template <
class K,
class V>
static string serialize(multimap<K,V> mp)
214 multimap<K,V> mpt = mp;
216 objXml =
"<multimap>";
217 while (mpt.begin()!=mpt.end())
220 objXml += serialize<K>(mpt.begin()->first);
221 objXml += serialize<V>(mpt.begin()->second);
222 mpt.erase(mpt.begin());
225 objXml +=
"</multimap>";
229 template <
class T>
static T unserialize(
string objXml)
232 const char *mangled =
typeid(t).name();
233 string className = demangle(mangled);
234 return *(T*)_handleAllUnSerialization(objXml,className);
236 static void* unSerializeUnknown(
string objXml,
string className)
238 return _handleAllUnSerialization(objXml,className);