Monero
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&);
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&);
139 
140  // PIMPL idiom
141  void* mWriter;
142  void* mStream;
143 };
144 
145 #endif // ARCHIVER_H__
Definition: archiver.h:103
JsonWriter & EndArray()
Definition: archiver.cpp:256
static const bool IsWriter
Definition: archiver.h:89
int i
Definition: pymoduletest.py:23
u
Definition: pymoduletest.py:20
JsonReader & Member(const char *name)
Definition: archiver.cpp:68
::std::string string
Definition: gtest-port.h:1097
JsonWriter()
Constructor.
Definition: archiver.cpp:216
bool HasMember(const char *name) const
Definition: archiver.cpp:83
bool mError
Whether an error has occurred.
Definition: archiver.h:100
const char * s
Definition: minissdp.c:596
bool HasMember(const char *name) const
Definition: archiver.cpp:245
JsonReader & SetNull()
Definition: archiver.cpp:179
JsonWriter & StartObject()
Definition: archiver.cpp:230
void * mStream
Stream buffer.
Definition: archiver.h:142
JsonReader & EndArray()
Definition: archiver.cpp:109
JsonReader & StartArray(size_t *size=0)
Definition: archiver.cpp:89
Definition: d.py:1
JsonReader & StartObject()
Definition: archiver.cpp:48
JsonWriter & Member(const char *name)
Definition: archiver.cpp:240
JsonWriter & StartArray(size_t *size=0)
Definition: archiver.cpp:251
void * mStack
Stack for iterating the DOM.
Definition: archiver.h:99
Represents a JSON reader which implements Archiver concept.
Definition: archiver.h:56
static const bool IsReader
Definition: archiver.h:88
JsonReader & operator=(const JsonReader &)
JsonReader & EndObject()
Definition: archiver.cpp:58
JsonReader(const char *json)
Constructor.
Definition: archiver.cpp:31
JsonWriter & operator=(const JsonWriter &)
void * mWriter
JSON writer.
Definition: archiver.h:141
const char * GetString() const
Obtains the serialized JSON string.
Definition: archiver.cpp:226
JsonWriter & SetNull()
Definition: archiver.cpp:286
static const bool IsReader
Definition: archiver.h:133
int bool
Definition: stdbool.h:35
void * mDocument
DOM result of parsing.
Definition: archiver.h:98
JsonReader & operator &(bool &b)
JsonWriter & operator &(bool &b)
const char * name
Definition: options.c:30
void Next()
Definition: archiver.cpp:185
static const bool IsWriter
Definition: archiver.h:134
rapidjson::Document json
Definition: transport.cpp:49
~JsonReader()
Destructor.
Definition: archiver.cpp:42
~JsonWriter()
Destructor.
Definition: archiver.cpp:221
cryptonote::block b
Definition: block.cpp:40
JsonWriter & EndObject()
Definition: archiver.cpp:235