| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #ifndef ARCHIVER_H_
- #define ARCHIVER_H_
- #include <cstddef>
- #include <string>
- /**
- \class Archiver
- \brief Archiver concept
- Archiver can be a reader or writer for serialization or deserialization respectively.
- class Archiver {
- public:
- /// \returns true if the archiver is in normal state. false if it has errors.
- operator bool() const;
- /// Starts an object
- Archiver& StartObject();
-
- /// After calling StartObject(), assign a member with a name
- Archiver& Member(const char* name);
- /// After calling StartObject(), check if a member presents
- bool HasMember(const char* name) const;
- /// Ends an object
- Archiver& EndObject();
- /// Starts an array
- /// \param size If Archiver::IsReader is true, the size of array is written.
- Archiver& StartArray(size_t* size = 0);
- /// Ends an array
- Archiver& EndArray();
- /// Read/Write primitive types.
- Archiver& operator&(bool& b);
- Archiver& operator&(unsigned& u);
- Archiver& operator&(int& i);
- Archiver& operator&(double& d);
- Archiver& operator&(std::string& s);
- /// Write primitive types.
- Archiver& SetNull();
- //! Whether it is a reader.
- static const bool IsReader;
- //! Whether it is a writer.
- static const bool IsWriter;
- };
- */
- /// Represents a JSON reader which implements Archiver concept.
- class JsonReader {
- public:
- /// Constructor.
- /**
- \param json A non-const source json string for in-situ parsing.
- \note in-situ means the source JSON string will be modified after parsing.
- */
- JsonReader(const char* json);
- /// Destructor.
- ~JsonReader();
- // Archive concept
- operator bool() const { return !mError; }
- JsonReader& StartObject();
- JsonReader& Member(const char* name);
- bool HasMember(const char* name) const;
- JsonReader& EndObject();
- JsonReader& StartArray(size_t* size = 0);
- JsonReader& EndArray();
- JsonReader& operator&(bool& b);
- JsonReader& operator&(unsigned& u);
- JsonReader& operator&(int& i);
- JsonReader& operator&(double& d);
- JsonReader& operator&(std::string& s);
- JsonReader& SetNull();
- static const bool IsReader = true;
- static const bool IsWriter = !IsReader;
- private:
- JsonReader(const JsonReader&);
- JsonReader& operator=(const JsonReader&);
- void Next();
- // PIMPL
- void* mDocument; ///< DOM result of parsing.
- void* mStack; ///< Stack for iterating the DOM
- bool mError; ///< Whether an error has occurred.
- };
- class JsonWriter {
- public:
- /// Constructor.
- JsonWriter();
- /// Destructor.
- ~JsonWriter();
- /// Obtains the serialized JSON string.
- const char* GetString() const;
- // Archive concept
- operator bool() const { return true; }
- JsonWriter& StartObject();
- JsonWriter& Member(const char* name);
- bool HasMember(const char* name) const;
- JsonWriter& EndObject();
- JsonWriter& StartArray(size_t* size = 0);
- JsonWriter& EndArray();
- JsonWriter& operator&(bool& b);
- JsonWriter& operator&(unsigned& u);
- JsonWriter& operator&(int& i);
- JsonWriter& operator&(double& d);
- JsonWriter& operator&(std::string& s);
- JsonWriter& SetNull();
- static const bool IsReader = false;
- static const bool IsWriter = !IsReader;
- private:
- JsonWriter(const JsonWriter&);
- JsonWriter& operator=(const JsonWriter&);
- // PIMPL idiom
- void* mWriter; ///< JSON writer.
- void* mStream; ///< Stream buffer.
- };
- #endif // ARCHIVER_H__
|