/****************************************************************************** ** libDXFrw - Library to read/write DXF files (ascii & binary) ** ** ** ** Copyright (C) 2011 Rallaz, rallazz@gmail.com ** ** ** ** This library is free software, licensed under the terms of the GNU ** ** General Public License as published by the Free Software Foundation, ** ** either version 2 of the License, or (at your option) any later version. ** ** You should have received a copy of the GNU General Public License ** ** along with this program. If not, see . ** ******************************************************************************/ #ifndef DXFREADER_H #define DXFREADER_H #include "drw_textcodec.h" class dxfReader { public: dxfReader( std::ifstream* stream ) { filestr = stream; doubleData = 0.0; intData = 0; int64 = 0; #ifdef DRW_DBG count = 0; #endif } virtual ~dxfReader() {} virtual bool readCode( int* code ) = 0; // return true if sucesful (not EOF) virtual bool readString( std::string* text ) = 0; virtual bool readString() = 0; bool readRec( int* code, bool skip ); virtual bool readInt() = 0; virtual bool readInt32() = 0; virtual bool readInt64() = 0; virtual bool readDouble() = 0; virtual bool readBool() = 0; std::string getString() { return strData; } int getHandleString(); // Convert hex string to int std::string toUtf8String( std::string t ) { return decoder.toUtf8( t ); } std::string getUtf8String() { return decoder.toUtf8( strData ); } double getDouble() { return doubleData; } int getInt32() { return intData; } unsigned long long int getInt64() { return int64; } bool getBool() { return (intData==0) ? false : true; } int getVersion() { return decoder.getVersion(); } void setVersion( std::string* v ) { decoder.setVersion( v ); } void setCodePage( std::string* c ) { decoder.setCodePage( c ); } std::string getCodePage() { return decoder.getCodePage(); } #ifdef DRW_DBG int count; // DBG #endif protected: std::ifstream* filestr; std::string strData; double doubleData; signed int intData; // 32 bits integer unsigned long long int int64; // 64 bits integer private: DRW_TextCodec decoder; }; class dxfReaderBinary : public dxfReader { public: dxfReaderBinary( std::ifstream* stream ) : dxfReader( stream ) {} virtual ~dxfReaderBinary() {} virtual bool readCode( int* code ) override; virtual bool readString( std::string* text ) override; virtual bool readString() override; virtual bool readInt() override; virtual bool readInt32() override; virtual bool readInt64() override; virtual bool readDouble() override; virtual bool readBool() override; }; class dxfReaderAscii : public dxfReader { public: dxfReaderAscii( std::ifstream* stream ) : dxfReader( stream ) {} virtual ~dxfReaderAscii() {} virtual bool readCode( int* code ) override; virtual bool readString( std::string* text ) override; virtual bool readString() override; virtual bool readInt() override; virtual bool readDouble() override; virtual bool readInt32() override; virtual bool readInt64() override; virtual bool readBool() override; }; #endif // DXFREADER_H