diff --git a/DataTreeCore.cpp b/DataTreeCore.cpp index 55e51de..0aabcd4 100644 --- a/DataTreeCore.cpp +++ b/DataTreeCore.cpp @@ -242,7 +242,7 @@ TDataMember ** CDataTree::GetMemberPtr( TDataMember * BaseMember, const char * // Find next parent Child = &(Member->FirstChild); - while (*Child && ((*Child)->NameLen != KeyLen) && strncasecmp( (*Child)->Name, Key, KeyLen )) { + while (*Child && (((*Child)->NameLen != KeyLen) || strncasecmp( (*Child)->Name, Key, KeyLen ))) { Child = &((*Child)->Next); } if (!*Child && Create) { @@ -273,6 +273,50 @@ TDataMember * CDataTree::GetMember( TDataMember * BaseMember, const char * Path } //--------------------------------------------------------------------------- +TDataMember * CDataTree::GetFirstChild( TDataMember * Parent ) +{ + // Get Parent + if (!Parent) + Parent = RootMember; + + // Return child + return Parent->FirstChild; +} +//--------------------------------------------------------------------------- + +TDataMember * CDataTree::GetNextChild( TDataMember * PrevChild ) +{ + // Validate + if (!PrevChild) + return NULL; + + // Return next child + return PrevChild->Next; +} +//--------------------------------------------------------------------------- + +TDataMember * CDataTree::GetIndexChild( TDataMember * Parent, const int Index ) +{ + TDataMember * Child; + int Count; + + // Get Parent + if (!Parent) + Parent = RootMember; + + // Get Indexed child + Count = 0; + Child = Parent->FirstChild; + while (Child && (Count < Index)) { + Child = Child->Next; + Count++; + } + + // Return child + return Child; +} +//--------------------------------------------------------------------------- + bool CDataTree::Delete( TDataMember * BaseMember, const char * Path ) { TDataMember * Parent; diff --git a/DataTreeCore.h b/DataTreeCore.h index 7c24c88..88cc251 100644 --- a/DataTreeCore.h +++ b/DataTreeCore.h @@ -67,7 +67,10 @@ public: EDataType GetType( TDataMember * BaseMember, const char * Path ); TDataMember * GetMember( TDataMember * BaseMember, const char * Path, bool Create = false ); - TDataMember * GetFirstChild( TDataMember * BaseMember, const char * Path, bool Create = false ); + + TDataMember * GetFirstChild( TDataMember * Parent ); + TDataMember * GetNextChild( TDataMember * PrevChild ); + TDataMember * GetIndexChild( TDataMember * Parent, const int Index ); 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 );