- Library Clean up: - Removed all unused C/C++ libraries from source - First C/C++ libraries then redA libraries - Library changes: - renamed BufferCore -> CharBufferCore - added ItemBufferCore - CharBufferCore: - Derive RollingBuffer & ShiftBuffer from common class CharBuffer - CharBuffer is mostly a virtual class (interface)
95 lines
3.7 KiB
C++
95 lines
3.7 KiB
C++
/*
|
|
* DataTreeCore.h
|
|
*
|
|
* Created on: 5 Mar 2017
|
|
* Author: wentzelc
|
|
*/
|
|
|
|
#ifndef REDACORE_DATATREECORE_H_
|
|
#define REDACORE_DATATREECORE_H_
|
|
|
|
// Standard C/C++ Libraries
|
|
#include <stdlib.h>
|
|
|
|
// redA Libraries
|
|
#include "CharBufferCore.h"
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
typedef enum { jtNull = 0, jtBool = 1, jtInt = 2, jtFloat = 3, jtString = 4, jtArray = 5, jtObject = 6 } EDataType;
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
// Structure prototypes
|
|
typedef struct SDataMember TDataMember;
|
|
|
|
// One Config Members
|
|
struct SDataMember
|
|
{
|
|
char * Name;
|
|
unsigned short NameLen;
|
|
EDataType Type;
|
|
|
|
TDataMember * FirstChild;
|
|
char * Value;
|
|
unsigned short Len;
|
|
|
|
TDataMember * Next;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
class CDataTree
|
|
{
|
|
private:
|
|
TDataMember * RootMember;
|
|
|
|
// Manage Members
|
|
TDataMember * CreateMember( const char * Name, const int Len = -1 );
|
|
bool AddMember( TDataMember * Parent, TDataMember * Member );
|
|
bool DestroyMember( TDataMember ** Member );
|
|
bool DestroyValue( TDataMember * Member );
|
|
|
|
// Find Member
|
|
TDataMember * GetRootMember() { return RootMember; };
|
|
TDataMember ** GetMemberPtr( TDataMember * BaseMember, const char * Path, bool Create, TDataMember ** Parent = NULL );
|
|
|
|
// Set Member value
|
|
bool SetValue( TDataMember * Member, EDataType Type, const char * Value = NULL, int Len = -1 );
|
|
bool SetValuePtr( TDataMember * Member, EDataType Type, char * Value, int Len );
|
|
|
|
public:
|
|
CDataTree();
|
|
~CDataTree();
|
|
|
|
EDataType GetType( TDataMember * BaseMember, const char * Path );
|
|
TDataMember * GetMember( TDataMember * BaseMember, const char * Path, bool Create = false );
|
|
|
|
TDataMember * GetIndexChild( TDataMember * Parent, const int Index );
|
|
TDataMember * GetFirstChild( TDataMember * Parent, const char * Path, bool Create = false );
|
|
|
|
inline TDataMember * GetFirstChild( TDataMember * Parent ) { return ((Parent)? Parent->FirstChild : NULL); };
|
|
inline TDataMember * GetNextChild( TDataMember * PrevChild ) { return ((PrevChild)? PrevChild->Next : NULL); };
|
|
|
|
const char * GetStr( TDataMember * BaseMember, const char * Path, const char * Default = NULL, bool Create = false );
|
|
const char * GetStr( TDataMember * BaseMember, const char * Path, int &Len, const char * Default = NULL, bool Create = false );
|
|
const long GetInt( TDataMember * BaseMember, const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL );
|
|
const double GetFloat( TDataMember * BaseMember, const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL );
|
|
const bool GetBool( TDataMember * BaseMember, const char * Path, bool Default = false, bool Create = false );
|
|
|
|
bool SetObject( TDataMember * BaseMember, const char * Path );
|
|
bool SetArray( TDataMember * BaseMember, const char * Path );
|
|
bool SetStr( TDataMember * BaseMember, const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values
|
|
bool SetInt( TDataMember * BaseMember, const char * Path, const long Value, const char * Mask = NULL );
|
|
bool SetFloat( TDataMember * BaseMember, const char * Path, const double Value, const char * Mask = NULL );
|
|
bool SetBool( TDataMember * BaseMember, const char * Path, const bool Value );
|
|
bool SetNull( TDataMember * BaseMember, const char * Path );
|
|
|
|
bool Delete( TDataMember * BaseMember, const char * Path );
|
|
bool DeleteAll();
|
|
|
|
friend class CJSONparse;
|
|
};
|
|
|
|
#endif /* REDACORE_DATATREECORE_H_ */
|