Important Update:
- Implemented basic child element navigation: GetFirstChild(), GetNextChild(), GetIndexChild() - Bug fix: Faulty name comparison using length
This commit is contained in:
@@ -242,7 +242,7 @@ TDataMember ** CDataTree::GetMemberPtr( TDataMember * BaseMember, const char *
|
|||||||
|
|
||||||
// Find next parent
|
// Find next parent
|
||||||
Child = &(Member->FirstChild);
|
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);
|
Child = &((*Child)->Next);
|
||||||
}
|
}
|
||||||
if (!*Child && Create) {
|
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 )
|
bool CDataTree::Delete( TDataMember * BaseMember, const char * Path )
|
||||||
{
|
{
|
||||||
TDataMember * Parent;
|
TDataMember * Parent;
|
||||||
|
|||||||
@@ -67,7 +67,10 @@ public:
|
|||||||
|
|
||||||
EDataType GetType( TDataMember * BaseMember, const char * Path );
|
EDataType GetType( TDataMember * BaseMember, const char * Path );
|
||||||
TDataMember * GetMember( TDataMember * BaseMember, const char * Path, bool Create = false );
|
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, 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 char * GetStr( TDataMember * BaseMember, const char * Path, int &Len, const char * Default = NULL, bool Create = false );
|
||||||
|
|||||||
Reference in New Issue
Block a user