Important Update:

- Implemented basic child element navigation:
  GetFirstChild(), GetNextChild(), GetIndexChild()
- Bug fix: Faulty name comparison using length
This commit is contained in:
Charl Wentzel
2017-04-06 06:56:03 +02:00
parent 23db2539d9
commit 9b42d516a1
2 changed files with 49 additions and 2 deletions

View File

@@ -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;