//////////////////////////////////////////////////////////////////////// // Copyright (c) Nehmulos 2011-2014 // This file is part of N0 Strain Serialization Library. // // N0Strain-Serialization-Library is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // N0Strain-Serialization-Library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with N0Strain-Serialization-Library. If not, see https://gnu.org/licenses/lgpl-3.0 //////////////////////////////////////////////////////////////////////// #ifndef JSONWRITER_H_ #define JSONWRITER_H_ #include "Describer.h" #include namespace nw { class JsonDrooler : public Describer { public: JsonDrooler(const String filename); virtual ~JsonDrooler(); void close(); void readFromFile(const String filename); bool isInWriteMode(); bool push(const String tagName); void describeSimpleArray(const String arrayName, unsigned int size); template void pushValueToSimpleArray(T& value); void describeArray(const String arrayName, const String elementsName, unsigned int size); void describeValueArray(const String arrayName, unsigned int size); bool enterNextElement(unsigned int iterator); /* Serialize functions */ void describeName(const String name); void describeValue(bool&); void describeValue(char&); void describeValue(unsigned char&); void describeValue(signed char&); void describeValue(short&); void describeValue(unsigned short&); void describeValue(int&); void describeValue(unsigned int&); void describeValue(long&); void describeValue(unsigned long&); void describeValue(float&); void describeValue(Pointer); void describeValue(double&); void describeValue(long long&); void describeValue(long double&); void describeValue(String&); void describeBlob(const String childName,nw::Pointer binaryBlob, unsigned int blobSize); void comment(const String text); String getParentName(); void pop(); private: std::fstream file; bool isFirstElement; unsigned int level; struct JsonWriterArray { String nameOfArray; unsigned int size; bool wroteFirstElement; bool isValueArray; }; std::stack openArrays; inline String tabsForLevel(); inline void writeComma(); inline void writeValueArrayComma(); }; } // namespace nw #endif /* JSONWRITER_H_ */