Electroneum
archiver.h
Go to the documentation of this file.
1 #ifndef ARCHIVER_H_
2 #define ARCHIVER_H_
3 
4 #include <cstddef>
5 #include <string>
6 
16 
19 
22 
25 
28 
32 
35 
38 
45 
48 
51 
55 class JsonReader {
57 public:
59 
63  JsonReader(const char* json);
64 
66  ~JsonReader();
67 
68  // Archive concept
69 
70  operator bool() const { return !mError; }
71 
73  JsonReader& Member(const char* name);
74  bool HasMember(const char* name) const;
76 
77  JsonReader& StartArray(size_t* size = 0);
79 
80  JsonReader& operator&(bool& b);
81  JsonReader& operator&(unsigned& u);
82  JsonReader& operator&(int& i);
83  JsonReader& operator&(double& d);
85 
87 
88  static const bool IsReader = true;
89  static const bool IsWriter = !IsReader;
90 
91 private:
92  JsonReader(const JsonReader&);
93  JsonReader& operator=(const JsonReader&);
94 
95  void Next();
96 
97  // PIMPL
98  void* mDocument;
99  void* mStack;
100  bool mError;
101 };
102 
103 class JsonWriter {
104 public:
106  JsonWriter();
107 
109  ~JsonWriter();
110 
112  const char* GetString() const;
113 
114  // Archive concept
115 
116  operator bool() const { return true; }
117 
119  JsonWriter& Member(const char* name);
120  bool HasMember(const char* name) const;
122 
123  JsonWriter& StartArray(size_t* size = 0);
124  JsonWriter& EndArray();
125 
126  JsonWriter& operator&(bool& b);
127  JsonWriter& operator&(unsigned& u);
128  JsonWriter& operator&(int& i);
129  JsonWriter& operator&(double& d);
131  JsonWriter& SetNull();
132 
133  static const bool IsReader = false;
134  static const bool IsWriter = !IsReader;
135 
136 private:
137  JsonWriter(const JsonWriter&);
138  JsonWriter& operator=(const JsonWriter&);
139 
140  // PIMPL idiom
141  void* mWriter;
142  void* mStream;
143 };
144 
145 #endif // ARCHIVER_H__
JsonWriter & StartArray(size_t *size=0)
Definition: archiver.cpp:251
JsonReader & StartObject()
Definition: archiver.cpp:48
const char * GetString() const
Obtains the serialized JSON string.
Definition: archiver.cpp:226
JsonReader(const char *json)
Constructor.
Definition: archiver.cpp:31
::std::string string
Definition: gtest-port.h:1097
static const bool IsReader
Definition: archiver.h:133
const char * name
static const bool IsReader
Definition: archiver.h:88
JsonWriter & StartObject()
Definition: archiver.cpp:230
JsonWriter & operator &(bool &b)
static const bool IsWriter
Definition: archiver.h:89
static const bool IsWriter
Definition: archiver.h:134
JsonReader & Member(const char *name)
Definition: archiver.cpp:68
JsonReader & operator &(bool &b)
JsonWriter & EndArray()
Definition: archiver.cpp:256
Represents a JSON reader which implements Archiver concept.
Definition: archiver.h:56
bool HasMember(const char *name) const
Definition: archiver.cpp:83
JsonWriter & Member(const char *name)
Definition: archiver.cpp:240
bool HasMember(const char *name) const
Definition: archiver.cpp:245
JsonWriter()
Constructor.
Definition: archiver.cpp:216
~JsonWriter()
Destructor.
Definition: archiver.cpp:221
JsonWriter & EndObject()
Definition: archiver.cpp:235
JsonReader & EndObject()
Definition: archiver.cpp:58
JsonReader & EndArray()
Definition: archiver.cpp:109
int bool
Definition: stdbool.h:36
~JsonReader()
Destructor.
Definition: archiver.cpp:42
JsonReader & StartArray(size_t *size=0)
Definition: archiver.cpp:89
JsonReader & SetNull()
Definition: archiver.cpp:179
JsonWriter & SetNull()
Definition: archiver.cpp:286
rapidjson::Document json
Definition: transport.cpp:49