Elm  1.0
ELM is a library providing generic data structures, OS-independent interface, plugins and XML.
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Unserializer.h
1 /*
2  * $Id$
3  * Copyright (c) 2006, IRIT - UPS.
4  *
5  * elm/serial/Unserializer.h -- Unserializer clas interface.
6  */
7 #ifndef ELM_SERIAL_UNSERIALIZER_H
8 #define ELM_SERIAL_UNSERIALIZER_H
9 
10 #include <elm/string.h>
11 #include <elm/util/Pair.h>
12 #include <elm/serial/SerialClass.h>
13 
14 namespace elm { namespace serial {
15 
16 // Unserializer class
17 class Unserializer {
18 
19  template <class T> void process(T& val) { read(val); };
20 
21 public:
22  virtual ~Unserializer(void) { }
23 
24  // Read control
25  template <class T> inline void read(T& val) {
26  beginObject(T::__class.name(), &val);
27  val.__serialize(*this);
28  endObject();
29  }
30  template <class T> inline void read(T *&val) {
31  readPointer(T::__class, (void*&)val);
32  }
33  virtual void close(void) = 0;
34  virtual void readPointer(SerialClass& clazz, void *&ptr) = 0;
35  virtual void beginObject(CString name, void *ptr) = 0;
36  virtual void endObject(void) = 0;
37  virtual bool beginField(CString name) = 0;
38  virtual void endField(void) = 0;
39  virtual bool beginList(void) = 0;
40  virtual void endList(void) = 0;
41  virtual bool nextItem(void) = 0;
42  virtual int readEnum(Pair<elm::CString, int> values[]) = 0;
43 
44  // Read base types
45  virtual void read(bool& val) = 0;
46  virtual void read(char& val) = 0;
47  virtual void read(unsigned char& val) = 0;
48  virtual void read(short& val) = 0;
49  virtual void read(unsigned short& val) = 0;
50  virtual void read(long& val) = 0;
51  virtual void read(unsigned long& val) = 0;
52  virtual void read(int& val) = 0;
53  virtual void read(unsigned int& val) = 0;
54  virtual void read(long long& val) = 0;
55  virtual void read(unsigned long long& val) = 0;
56  virtual void read(float& val) = 0;
57  virtual void read(double& val) = 0;
58  virtual void read(CString& val) = 0;
59  virtual void read(String& val) = 0;
60 
61  // Operators
62  template <class T> inline Unserializer& operator>>(T& val) {
63  read(val);
64  return *this;
65  }
66 
67  // Private
68  template <class T> inline void processField(CString name, T& val) {
69  if(beginField(name)) {
70  process<T>(val);
71  endField();
72  }
73  };
74 };
75 
76 } } // elm::serial
77 
78 #endif // ELM_SERIAL_UNSERIALIZER_H
Definition: SerialClass.h:19
virtual bool nextItem(void)=0
Definition: CString.h:17
void processField(CString name, T &val)
Definition: Unserializer.h:68
virtual void beginObject(CString name, void *ptr)=0
virtual bool beginField(CString name)=0
virtual void endField(void)=0
virtual void close(void)=0
virtual void readPointer(SerialClass &clazz, void *&ptr)=0
Unserializer & operator>>(T &val)
Definition: Unserializer.h:62
virtual bool beginList(void)=0
Definition: Unserializer.h:17
virtual ~Unserializer(void)
Definition: Unserializer.h:22
void read(T &val)
Definition: Unserializer.h:25
Definition: String.h:31
virtual void endObject(void)=0
virtual void endList(void)=0
Definition: Pair.h:16
void read(T *&val)
Definition: Unserializer.h:30
virtual int readEnum(Pair< elm::CString, int > values[])=0