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
Serializer.h
1 /*
2  * $Id$
3  * Copyright (c) 2006, IRIT - UPS.
4  *
5  * elm/serial/Serializer.h -- Serializer clas interface.
6  */
7 #ifndef ELM_SERIAL_SERIALIZER_H
8 #define ELM_SERIAL_SERIALIZER_H
9 
10 #include <elm/string.h>
11 
12 namespace elm { namespace serial {
13 
14 // Serializer class
15 class Serializer {
16 
17  template <class T> static void delay(Serializer& serializer, const void *p) {
18  serializer.process<T>(*(T *)p);
19  }
20 
21  template <class T> void process(const T& val) { write(val); };
22 
23 protected:
24  typedef void (*delay_t)(Serializer& serializer, const void *p);
25  virtual void delayObject(const void *ptr, delay_t fun) = 0;
26 
27 public:
28  virtual ~Serializer(void) { }
29  virtual void close(void) = 0;
30 
31  // Write methods
32  template <class T> inline void write(const T& val) { process<T>(val); };
33  virtual void write(bool val) = 0;
34  virtual void write(char val) = 0;
35  virtual void write(unsigned char val) = 0;
36  virtual void write(short val) = 0;
37  virtual void write(unsigned short val) = 0;
38  virtual void write(long val) = 0;
39  virtual void write(unsigned long val) = 0;
40  virtual void write(int val) = 0;
41  virtual void write(unsigned int val) = 0;
42  virtual void write(long long val) = 0;
43  virtual void write(unsigned long long val) = 0;
44  virtual void write(float val) = 0;
45  virtual void write(double val) = 0;
46  virtual void write(CString val) = 0;
47  virtual void write(String& val) = 0;
48  virtual bool writePointer(const void *ptr) = 0;
49  virtual void beginObject(CString name, const void *ptr) = 0;
50  virtual void endObject(void) = 0;
51  virtual void writeField(CString name) = 0;
52 
53  // Operators
54  template <class T> inline Serializer& operator<<(const T& val) {
55  write(val);
56  return *this;
57  }
58 
59  // Private
60  template <class T> inline void processField(CString name, const T& val) {
61  writeField(name);
62  process<T>(val);
63  };
64 };
65 
66 } } // elm::serial
67 
68 #endif // ELM_SERIAL_SERIALIZER_H
Definition: CString.h:17
Definition: Serializer.h:15
void processField(CString name, const T &val)
Definition: Serializer.h:60
void(* delay_t)(Serializer &serializer, const void *p)
Definition: Serializer.h:24
virtual void close(void)=0
virtual bool writePointer(const void *ptr)=0
virtual void beginObject(CString name, const void *ptr)=0
virtual void endObject(void)=0
void write(const T &val)
Definition: Serializer.h:32
Serializer & operator<<(const T &val)
Definition: Serializer.h:54
Definition: String.h:31
virtual void writeField(CString name)=0
virtual ~Serializer(void)
Definition: Serializer.h:28
virtual void delayObject(const void *ptr, delay_t fun)=0