#ifndef __JString_h__ #define __JString_h__ #include "MString.h" #include #include namespace coreutils { /// /// Use the JString object when you need a JSON interface to C++. JString uses /// an MString to store a JSON string representing the object(s) contained. /// The [] operator is overriden from the ZString and provides a method to /// access the objects elements using a named path as the index to the items. /// /// JString default constructor will create an empty JString object pointing /// to an empty string. /// /// Use a constructor or assignment operator to initialize a JString to an /// initial JSON string. /// /// Several constructors are available including a handle to a std::FILE /// object to initialize the JSON string. On destruction the file is saved back. /// /// The [] operator can be used to access elements within the JSON string. /// Use: /// jstring["key"] = "value"; /// std::cout << jstring["key"]; /// class JString : public MString { public: JString(); void set(ZString &path, ZString &value); /// /// Use the find method to look through an object for member specified by /// the key in parameter 1. The cursor must be pointing to the { character /// that begins the object's list. /// ZString find(ZString &path); bool locate(ZString &path); bool notfirst; ZString path; class Proxy { public: Proxy(JString &jstring, ZString key) : jstring(jstring), key(key) {} friend std::ostream &operator<<(std::ostream &os, const Proxy &proxy); operator coreutils::ZString () { // std::cout << "operator to ZString: " << key << std::endl; return jstring.find(key); } operator coreutils::MString () { // std::cout << "operator to MString: " << key << std::endl; return jstring.find(key); } Proxy& operator=(coreutils::ZString value) { // std::cout << "proxy operator=" << value << std::endl; jstring.set(key, value); return *this; } private: JString &jstring; ZString key; }; Proxy operator[](coreutils::ZString key) { // std::cout << "operator[" << key << "]" << std::endl; return Proxy(*this, key); } JString & operator=(coreutils:: ZString value) { std::cout << "operator=" << value << std::endl; setSize(value.getLength()); memcpy(data, value.getData(), value.getLength()); length = value.getLength(); return *this; } }; } #endif