//////////////////////////////////////////////////////////////////////// // 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 BINARY_WRITER_H_ #define BINARY_WRITER_H_ #include "Describer.h" #include "BinaryFstream.h" #include namespace nw { class BinaryWriter : public Describer{ public: BinaryWriter(const String filepath); virtual ~BinaryWriter(); void virtual close(); void readFromFile(const String filename); bool isInWriteMode(); bool push(const String tagName); void describeArray(const String arrayName, const String elementsName, unsigned int size); void describeValueArray(const String arrayName, unsigned int size); bool enterTag(const String childrenTagName); bool enterNextElement(unsigned int iterator); void autoEnterTags(bool doIt); /* 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: BinaryFstream file; std::stack arraySize; //helpers inline void registerPointer(DescribedObject*); inline void writeValidationSequence(); }; } // namespace nw #endif /* BINARY_WRITER_H_ */