corelib/include/ebcl/SRDBinary.hh

78 lines
2.3 KiB
C++

/******************************************************************************/
/* SRD - BINARY STORAGE *******************************************************/
/******************************************************************************/
#ifndef _H_LW_LIB_SRDBINARY
#define _H_LW_LIB_SRDBINARY
#include <lw/lib/SRDIO.hh>
#include <lw/lib/HashIndex.hh>
namespace lw {
/*= WRITER ===================================================================*/
class T_SRDBinaryWriter : public A_SRDWriter
{
private:
T_BinaryWriter writer_;
T_HashIndex wordsIndex_;
T_Array< T_String > words_;
T_StringBuilder comment_;
uint32_t depth_;
void flushComment( );
void writeWord( T_String const& word );
public:
T_SRDBinaryWriter( ) = delete;
T_SRDBinaryWriter( T_SRDBinaryWriter const& ) = delete;
T_SRDBinaryWriter( T_SRDBinaryWriter&& ) = delete;
explicit T_SRDBinaryWriter( A_OutputStream& output );
T_SRDBinaryWriter& start( ) override;
T_SRDBinaryWriter& startList( ) override;
T_SRDBinaryWriter& endList( ) override;
T_SRDBinaryWriter& putText( T_String const& text ) override;
T_SRDBinaryWriter& putWord( T_String const& word ) override;
T_SRDBinaryWriter& putString( T_String const& string ) override;
T_SRDBinaryWriter& putComment( T_String const& comment ) override;
T_SRDBinaryWriter& putVariable( T_String const& variable ) override;
T_SRDBinaryWriter& putBinary( T_Buffer< uint8_t > const& binary ) override;
T_SRDBinaryWriter& putInteger( int64_t value ) override;
T_SRDBinaryWriter& putInt32( int32_t value ) override;
T_SRDBinaryWriter& putInt64( int64_t value ) override;
T_SRDBinaryWriter& putFloat( double value ) override;
T_SRDBinaryWriter& end( ) override;
};
void SRDBinaryWriteTo( A_OutputStream& output , T_SRDList const& data );
/*= READER ===================================================================*/
class T_SRDBinaryReader : public A_SRDReader
{
public:
T_SRDBinaryReader( ) = delete;
T_SRDBinaryReader( T_SRDBinaryReader const& ) = delete;
T_SRDBinaryReader( T_SRDBinaryReader&& ) = delete;
T_SRDBinaryReader( A_SRDReaderTarget& target );
void read( T_String const& name , A_InputStream& input ) override;
};
T_SRDList SRDBinaryReadFrom( T_String const& name , A_InputStream& input , bool structured = true );
} // namespace
#include <lw/lib/inline/SRDBinary.hh>
#endif // _H_LW_LIB_SRDBINARY