//////////////////////////////////////////////////////////////////////// // 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 XSDWRITER_H_ #define XSDWRITER_H_ #include "Describer.h" #include "Tag.h" namespace nw { class XsdWriter: public nw::Describer { public: XsdWriter(const String); virtual ~XsdWriter(); virtual void close(); virtual bool isInWriteMode(); virtual bool isSilentCrawler(); virtual bool push(const String tagName); virtual void pop(); virtual void describeArray(const String arrayName, const String ElementsName, unsigned int size); virtual void describeValueArray(const String arrayName, unsigned int size); virtual bool enterNextElement(unsigned int iterator); /* Serialize functions */ void describeName(const String name); //1 byte virtual void describeValue(bool&) ; ///< Describe a boolean reference virtual void describeValue(char&) ; ///< Describe a character reference virtual void describeValue(unsigned char&) ; ///< Describe an unsigned char reference virtual void describeValue(signed char&) ; ///< Describe a signed char reference //2 byte virtual void describeValue(short&) ; ///< Describe a short reference virtual void describeValue(unsigned short&); ///< Describe an unsigned short reference //4 byte virtual void describeValue(int&) ; ///< Describe an integer reference virtual void describeValue(unsigned int&) ; ///< Describe an unsigned integer reference virtual void describeValue(long&) ; ///< Describe a long reference virtual void describeValue(unsigned long&) ; ///< Describe an unsigned long reference virtual void describeValue(float&) ; ///< Describe a float reference virtual void describeValue(Pointer) ; ///< Describe a PointerId reference //8 byte virtual void describeValue(double&) ; ///< Describe a double reference virtual void describeValue(long long&) ; ///< Describe a long long reference //12 byte virtual void describeValue(long double&) ; ///< Describe a long double reference //variable size virtual void describeValue(String&) ; ///< Describe a String reference virtual void describeBlob(const String childName,nw::Pointer binaryBlob, unsigned int blobSize); ///< Describe Binary blobs virtual void comment(const String text); ///< Write a comment if it's supported private: std::fstream file; Tag* currentTag; Tag* selectedTag; /// store open arrays std::stack didCheckArray; //////////////////////////////////////////////////////////////// /// create the following tag with attributes: /// //////////////////////////////////////////////////////////////// inline void addXsdElement(const String type); /// simply pushes one tag without pushing complexType and sequence inline void simplePush(const String tagname); /// simply pops one tag instead of also poping complexType and sequence inline void simplePop(); }; } // namespace nw #endif /* XSDWRITER_H_ */