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
XOMUnserializer.h
1 /*
2  * $Id$
3  * Copyright (c) 2006, IRIT - UPS.
4  *
5  * XOMUnserializer class interface.
6  */
7 #ifndef ELM_SERIAL2_XOM_UNSERIALIZER_H
8 #define ELM_SERIAL2_XOM_UNSERIALIZER_H
9 
10 #include <elm/genstruct/HashTable.h>
11 #include <elm/genstruct/Vector.h>
12 #include <elm/serial2/serial.h>
13 #include <elm/serial2/Unserializer.h>
14 #include <elm/util/Pair.h>
15 
16 namespace elm {
17 
18 // Extern classes
19 namespace xom {
20  class Document;
21  class Element;
22 }
23 
24 namespace serial2 {
25 
26 // XOMUnserializer class
28 public:
29  XOMUnserializer(xom::Element *element);
31  ~XOMUnserializer(void);
32 
33  // XOMUnserializer overload
34  virtual void flush(void);
35  virtual void beginObject(AbstractType& clazz, void *object);
36  virtual void endObject(AbstractType& clazz, void *object);
37  virtual bool beginField(CString name);
38  virtual void endField(void);
39  virtual void onPointer(AbstractType& clazz, void **object);
40  virtual bool beginCompound(void*);
41  virtual int countItems(void);
42  virtual bool nextItem(void);
43  virtual void endCompound(void*);
44  virtual int onEnum(AbstractEnum& clazz);
45  virtual void onValue(bool& v);
46  virtual void onValue(signed int& v);
47  virtual void onValue(unsigned int& v);
48  virtual void onValue(char& v);
49  virtual void onValue(signed char& v);
50  virtual void onValue(unsigned char& v);
51  virtual void onValue(signed short& v);
52  virtual void onValue(unsigned short& v);
53  virtual void onValue(signed long& v);
54  virtual void onValue(unsigned long& v);
55  virtual void onValue(signed long long& v);
56  virtual void onValue(unsigned long long& v);
57  virtual void onValue(float& v);
58  virtual void onValue(double& v);
59  virtual void onValue(long double& v);
60  virtual void onValue(CString& v);
61  virtual void onValue(String& v);
62 
63 private:
64  typedef struct patch_t {
65  struct patch_t *next;
66  void **ptr;
67  inline patch_t(void **_ptr): ptr(_ptr) { };
68  } patch_t;
69 
70  typedef struct ref_t {
71  AbstractType& t;
72  void *ptr;
73  patch_t *patches;
74  inline ref_t(AbstractType& type, void *_ptr = 0) : t(type), ptr(_ptr), patches(0) { };
75  void put(void **_ptr);
76  void record(void *_ptr);
77  } ref_t;
78 
79  typedef struct context_t {
80  int i;
81  xom::Element *elem;
82  } context_t;
83 
84  xom::Document *doc;
85  context_t ctx;
86  elm::io::Input in;
90 
91  void embed(AbstractType& clazz, void **ptr);
92 };
93 
94 } } // elm::serial2
95 
96 #endif // ELM_SERIAL2_XOM_UNSERIALIZER_H
97 
Definition: CString.h:17
virtual void endField(void)
Definition: serial2_XOMUnserializer.cpp:216
XOMUnserializer(xom::Element *element)
Definition: serial2_XOMUnserializer.cpp:54
Definition: serial.h:147
virtual void beginObject(AbstractType &clazz, void *object)
Definition: serial2_XOMUnserializer.cpp:181
Definition: Input.h:33
AbstractType & type(void)
Definition: serial.h:58
virtual int onEnum(AbstractEnum &clazz)
Definition: serial2_XOMUnserializer.cpp:276
Definition: Document.h:20
virtual void onPointer(AbstractType &clazz, void **object)
Definition: serial2_XOMUnserializer.cpp:155
Definition: serial.h:205
virtual bool beginField(CString name)
Definition: serial2_XOMUnserializer.cpp:204
virtual void flush(void)
Definition: serial2_XOMUnserializer.cpp:87
virtual int countItems(void)
Definition: serial2_XOMUnserializer.cpp:262
elm::ref_t ref_t
Definition: Unserializer.h:15
Definition: String.h:31
~XOMUnserializer(void)
Definition: serial2_XOMUnserializer.cpp:78
virtual bool nextItem(void)
Definition: serial2_XOMUnserializer.cpp:245
Definition: Element.h:21
virtual bool beginCompound(void *)
Definition: serial2_XOMUnserializer.cpp:223
Definition: HashTable.h:34
Definition: XOMUnserializer.h:27
virtual void onValue(bool &v)
Definition: serial2_XOMUnserializer.cpp:292
virtual void endObject(AbstractType &clazz, void *object)
Definition: serial2_XOMUnserializer.cpp:198
virtual void endCompound(void *)
Definition: serial2_XOMUnserializer.cpp:239