//////////////////////////////////////////////////////////////////////// // 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 //////////////////////////////////////////////////////////////////////// #pragma once #include "MarkupWriter.h" #include "JsonTag.h" #include namespace nw { class JsonWriter: public nw::MarkupWriter { public: JsonWriter(std::ostream& output); JsonWriter(const String filepath); virtual ~JsonWriter(); /* Serialize functions */ void describeName(const String); void describeValueConst(const bool&); ///< Adds a Tag to the currentTag void describeValueConst(const char&); ///< Adds a Tag to the currentTag void describeValueConst(const unsigned char&); ///< Adds a Tag to the currentTag void describeValueConst(const signed char&); ///< Adds a Tag to the currentTag void describeValueConst(const short&); ///< Adds a Tag to the currentTag void describeValueConst(const unsigned short&); ///< Adds a Tag to the currentTag void describeValueConst(const int&); ///< Adds a Tag to the currentTag void describeValueConst(const unsigned int&); ///< Adds a Tag to the currentTag void describeValueConst(const long&); ///< Adds a Tag to the currentTag void describeValueConst(const unsigned long&); ///< Adds a Tag to the currentTag void describeValueConst(const float&); ///< Adds a Tag to the currentTag void describeValueConst(const Pointer); ///< Adds a Tag to the currentTag void describeValueConst(const double&); ///< Adds a Tag to the currentTag void describeValueConst(const long long&); ///< Adds a Tag to the currentTag void describeValueConst(const long double&); ///< Adds a Tag to the currentTag void describeValueConst(const String&); ///< Adds a Tag to the currentTag void describeArray(const String arrayName, const String elementsName, unsigned int size); bool enterNextElement(unsigned int iterator); void comment(const String text); ///< Adds a comment Tag to the currentTag protected: virtual void writeToOutput(); template inline void setJsonValue(T ref, JsonType::Enum type); }; }