diff --git a/ApplicationCore.h b/ApplicationCore.h index cf036f7..ef630d6 100644 --- a/ApplicationCore.h +++ b/ApplicationCore.h @@ -88,6 +88,7 @@ public: // Manually set configuration bool SetLogParam( EDebugLevel pDebugLevel, int pOutputDisplay ); + inline void WriteToScreen( const char * BasePath, const int Indent = 2 ) { JSONparser->WriteToScreen( BasePath, Indent ); }; // Init application bool InitApplication(); diff --git a/DataTreeCore.cpp b/DataTreeCore.cpp index b3995c3..b92790d 100644 --- a/DataTreeCore.cpp +++ b/DataTreeCore.cpp @@ -130,18 +130,33 @@ CDataMember * CDataMember::CreateChild( const char * Name, const int Len ) bool CDataMember::Clear() { + // Clear value if (Value) { free( Value ); Value = NULL; } + + // Clear children while (FirstChild) { delete FirstChild; -// FirstChild = NULL; -// LastChild = NULL; -// Len = 0; } - Type = jtNull; + // Reset value + Type = jtNull; + return true; +} +//--------------------------------------------------------------------------- + +bool CDataMember::ClearCh( const char * Path ) +{ + CDataMember * Child = NULL; + + // Find member + if (!(Child = (!Path || !*Path)? this : GetChild( Path, false ))) + return false; + + // Clear + Child->Clear(); return true; } //--------------------------------------------------------------------------- @@ -318,7 +333,7 @@ CDataMember * CDataMember::GetChElement( const char * Path, const int Index, boo } //--------------------------------------------------------------------------- -bool CDataMember::Delete( const char * Path ) +bool CDataMember::DeleteCh( const char * Path ) { CDataMember * Member; @@ -484,7 +499,7 @@ bool CDataMember::SetChNull( const char * Path ) } //--------------------------------------------------------------------------- -const char * CDataMember::GetName( const char * Path ) +const char * CDataMember::GetChName( const char * Path ) { CDataMember * Member; @@ -496,7 +511,7 @@ const char * CDataMember::GetName( const char * Path ) } //--------------------------------------------------------------------------- -EDataType CDataMember::GetType( const char * Path ) +EDataType CDataMember::GetChType( const char * Path ) { CDataMember * Member; @@ -508,7 +523,7 @@ EDataType CDataMember::GetType( const char * Path ) } //--------------------------------------------------------------------------- -const int CDataMember::GetLen( const char * Path ) +const int CDataMember::GetChLen( const char * Path ) { CDataMember * Member; diff --git a/DataTreeCore.h b/DataTreeCore.h index da36048..afae4f7 100644 --- a/DataTreeCore.h +++ b/DataTreeCore.h @@ -49,8 +49,16 @@ public: CDataMember( CDataMember * pParent, const char * pName = NULL, const int pLen = -1 ); ~CDataMember(); + const char * GetName() { return Name; }; + const int GetLen() { return Len; }; + + const char * GetChName( const char * Path ); + const int GetChLen( const char * Path ); + + /* Check Type */ + EDataType GetType() { return Type; }; - EDataType GetType( const char * Path ); + EDataType GetChType( const char * Path ); inline bool isNull() { return (Type == jtNull); }; inline bool isBool() { return (Type == jtBool); }; @@ -60,28 +68,20 @@ public: inline bool isArray() { return (Type == jtArray); }; inline bool isObject() { return (Type == jtObject); }; - const char * GetName() { return Name; }; - const char * GetName( const char * Path ); + /* Navigating members */ - const int GetLen() { return Len; }; - const int GetLen( const char * Path ); + inline CDataMember * GetFirstChild() { return GetChFirstChild( NULL, false ); }; + inline CDataMember * GetElement( const int Index ) { return GetChElement( NULL, Index, false ); }; CDataMember * GetChild( const char * Path, bool Create = false ); CDataMember * GetChFirstChild( const char * Path, bool Create = false ); CDataMember * GetChElement( const char * Path, const int Index, bool Create = false ); - inline CDataMember * GetFirstChild() { return GetChFirstChild( NULL, false ); }; - inline CDataMember * GetElement( const int Index ) { return GetChElement( NULL, Index, false ); }; - inline CDataMember * GetParent() { return Parent; }; inline CDataMember * GetPrevPeer() { return PrevPeer; }; inline CDataMember * GetNextPeer() { return NextPeer; }; - const char * GetChStr( const char * Path, const char * Default = NULL, bool Create = false ); - const char * GetChStr( const char * Path, int &Len, const char * Default = NULL, bool Create = false ); - const bool GetChBool( const char * Path, bool Default = false, bool Create = false ); - const long GetChInt( const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL ); - const double GetChFloat( const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL ); + /* Read Values */ inline const char * GetStr( const char * Default = NULL ) { return GetChStr( NULL, Default, false ); }; inline const char * GetStr( int &Len, const char * Default = NULL ) { return GetChStr( NULL, Len, Default, false ); }; @@ -89,26 +89,39 @@ public: inline const long GetInt( long Default = 0, const char * Mask = NULL ) { return GetChInt( NULL, Default, false, Mask ); }; inline const double GetFloat( double Default = 0.0, const char * Mask = NULL ) { return GetChFloat( NULL, Default, false, Mask ); }; - bool SetChBool( const char * Path, const bool Value ); - bool SetChInt( const char * Path, const long Value, const char * Mask = NULL ); - bool SetChFloat( const char * Path, const double Value, const char * Mask = NULL ); - bool SetChStr( const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values + const char * GetChStr( const char * Path, const char * Default = NULL, bool Create = false ); + const char * GetChStr( const char * Path, int &Len, const char * Default = NULL, bool Create = false ); + const bool GetChBool( const char * Path, bool Default = false, bool Create = false ); + const long GetChInt( const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL ); + const double GetChFloat( const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL ); - inline bool SetBool( const bool Value ) { return SetChBool( NULL, Value ); }; - inline bool SetInt( const long Value, const char * Mask = NULL ) { return SetChInt( NULL, Value, Mask ); }; - inline bool SetFloat( const double Value, const char * Mask = NULL ) { return SetChFloat( NULL, Value, Mask ); }; - inline bool SetStr( const char * Value = NULL, const int Len = -1 ) { return SetChStr( NULL, Value, Len ); }; - - bool SetChNull( const char * Path ); - bool SetChObject( const char * Path ); - bool SetChArray( const char * Path ); + /* Modify Values */ inline bool SetNull() { return SetChNull( NULL ); }; inline bool SetObject() { return SetChObject( NULL ); }; inline bool SetArray() { return SetChArray( NULL ); }; + inline bool SetBool( const bool Value ) { return SetChBool( NULL, Value ); }; + inline bool SetInt( const long Value, const char * Mask = NULL ) { return SetChInt( NULL, Value, Mask ); }; + inline bool SetFloat( const double Value, const char * Mask = NULL ) { return SetChFloat( NULL, Value, Mask ); }; + inline bool SetStr( const char * Value = NULL, const int Len = -1 ) { return SetChStr( NULL, Value, Len ); }; + + bool SetChStr( const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values + bool SetChObject( const char * Path ); + bool SetChArray( const char * Path ); + + bool SetChNull( const char * Path ); + bool SetChBool( const char * Path, const bool Value ); + bool SetChInt( const char * Path, const long Value, const char * Mask = NULL ); + bool SetChFloat( const char * Path, const double Value, const char * Mask = NULL ); + + /* Clear / Remove values */ + bool Clear(); - bool Delete( const char * Path ); + bool ClearCh( const char * Path ); + bool DeleteCh( const char * Path ); + + /* Parsing */ friend class CJSONparse; }; diff --git a/JSONparseCore.cpp b/JSONparseCore.cpp index 6bf9c24..bca41c0 100644 --- a/JSONparseCore.cpp +++ b/JSONparseCore.cpp @@ -588,7 +588,7 @@ bool CJSONparse::ParseObject( CDataMember * Object ) if (!ParseObject( Member ) && !Error && !ParseArray( Member ) && !Error && !ParseString( Member ) && !Error && !ParsePrimitive( Member ) ) {} if (Error) { // Destroy member - Object->Delete( MemberName ); + Object->DeleteCh( MemberName ); return false; }