Интерфейс для хранения структурированных данных:
PHP код:
/**********************************************************************************************/
interface LTAPI I_Container
{
public://////////////////////////////////////////////////////////////////////////
virtual ~I_Container( void ) {}
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Structure/Navigation
virtual void SetPath( const String& path ) = 0;
virtual String GetPath( void ) const = 0;
virtual ArrayString GetGroups( void ) = 0;
virtual ArrayString GetEntries( void ) = 0;
virtual String GetFirstGroup( void ) = 0;
virtual String GetNextGroup( void ) = 0;
virtual String GetFirstEntry( void ) = 0;
virtual String GetNextEntry( void ) = 0;
virtual size_t GetNumberOfEntries( bool recursive = false ) const = 0;
virtual size_t GetNumberOfGroups( bool recursive = false ) const = 0;
virtual bool Delete( const String& path ) = 0;
virtual bool DeleteAll( void ) = 0;
virtual bool Exist( const String& path ) const = 0;
virtual bool Rename( const String& oldName, const String& newName ) = 0;
//////////////////////////////////////////////////////////////////////////
// Read/Write single value
virtual bool Read( const String& key, long& value, long defVal = 0 ) const = 0;
virtual long Read( const String& key, long defVal ) const = 0;
virtual bool Read( const String& key, bool& value, bool defVal = 0 ) const = 0;
virtual bool Read( const String& key, bool defVal ) const = 0;
virtual bool Read( const String& key, double& value, double defVal = 0 ) const = 0;
virtual double Read( const String& key, double defVal ) const = 0;
virtual bool Read( const String& key, String& value, String defVal = L"" ) const = 0;
virtual String Read( const String& key ) const = 0;
virtual bool Read( const String& key, void*& value, size_t& size ) const = 0;
virtual bool Read( const String& key, Bitmap& value ) const = 0;
virtual bool Write( const String& key, long value ) = 0;
virtual bool Write( const String& key, double value ) = 0;
virtual bool Write( const String& key, bool value ) = 0;
virtual bool Write( const String& key, const String& value ) = 0;
virtual bool Write( const String& key, void* value, size_t size ) = 0;
virtual bool Write( const String& key, const Bitmap& value ) = 0;
virtual bool CreateIfAbsent( const String& key, long value ) = 0;
virtual bool CreateIfAbsent( const String& key, double value ) = 0;
virtual bool CreateIfAbsent( const String& key, bool value ) = 0;
virtual bool CreateIfAbsent( const String& key, const String& value ) = 0;
virtual bool CreateIfAbsent( const String& key, void* value, size_t size ) = 0;
virtual bool CreateIfAbsent( const String& key, const Bitmap& value ) = 0;
//////////////////////////////////////////////////////////////////////////
// Read/Write arrays
virtual bool Read( const String& key, ArrayLong& value ) const = 0;
virtual bool Read( const String& key, ArrayBool& value ) const = 0;
virtual bool Read( const String& key, ArrayDouble& value ) const = 0;
virtual bool Read( const String& key, ArrayString& value ) const = 0;
virtual bool Read( const String& key, ArrayBitmap& value ) const = 0;
virtual bool Write( const String& key, const ArrayLong& value ) = 0;
virtual bool Write( const String& key, const ArrayDouble& value ) = 0;
virtual bool Write( const String& key, const ArrayBool& value ) = 0;
virtual bool Write( const String& key, const ArrayString& value ) = 0;
virtual bool Write( const String& key, const ArrayBitmap& value ) = 0;
//////////////////////////////////////////////////////////////////////////
// Other
virtual void Flush( void ) = 0;
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Import/Export
virtual String SaveToString( void ) = 0;
virtual void SaveToBuf( void*& value, size_t& size ) = 0;
virtual void SaveToFile( const String& path ) = 0;
virtual void LoadFromString( const String& value ) = 0;
virtual void LoadFromBuf( void* value, size_t size ) = 0;
virtual void LoadFromFile( const String& path ) = 0;
public://////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Options
virtual void SetCreateOnReadIfAbsent( bool value ) = 0;
virtual bool GetCreateOnReadIfAbsent( void ) = 0;
};
Есть две реализации( которые наследуются от I_ContainerImpl, что позволяет значительно сократить код в них ): TextContainer и XMLContainer, первая хранит все в INI-формате , вторая в XML.
пример кода:
PHP код:
ArrayString list( 3, "A", "B", "C" );
TextContainer container;
container.Write( "/Arrays/List", list );
container.Write( "/Simple/Long", 1024 );
String export = container.SaveToString();
list.Clear();
TextContainer container2( export );
container2.Read( "/Arrays/List", list );