Important Update:

- DataTreeCore:
  - Add Parent & Prev Child links to DataMembers
  - Update CreateMember() to set Parent/Sibling reference
      & increase Parent->Len
  - Remove AddMember()
  - Update DestroyMember() to decrease Parent->Len
- JSONparseCore:
  - Update ParseArray() for above changes made to DataTreeCore
This commit is contained in:
Charl Wentzel
2017-08-11 15:42:59 +02:00
parent 73743060a0
commit 2b7c49d5bb
3 changed files with 50 additions and 42 deletions

View File

@@ -598,7 +598,8 @@ bool CJSONparse::ParseObject( TDataMember * Object )
bool CJSONparse::ParseArray( TDataMember * Array )
{
TDataMember * Member = NULL;
TDataMember ** Member;
TDataMember * PrevMember;
// Check for start of Object
if (*BufPos != '[') {
@@ -608,7 +609,8 @@ bool CJSONparse::ParseArray( TDataMember * Array )
// Set Type
DataTree->SetValue( Array, jtArray );
Member = &(Array->FirstChild);
PrevMember = NULL;
while (true)
{
// Look for Member Name
@@ -618,17 +620,18 @@ bool CJSONparse::ParseArray( TDataMember * Array )
}
// Add new element
Member = DataTree->CreateMember( NULL );
*Member = DataTree->CreateMember( Array, PrevMember, NULL );
// Get Value
SkipWhiteSpace();
if (!ParseObject( Member ) && !Error && !ParseArray( Member ) && !Error && !ParseString( Member ) && !Error && !ParsePrimitive( Member ) ) {}
if (!ParseObject( *Member ) && !Error && !ParseArray( *Member ) && !Error && !ParseString( *Member ) && !Error && !ParsePrimitive( *Member ) ) {}
if (Error) {
DataTree->DestroyMember( &Member );
DataTree->DestroyMember( Member );
return false;
}
else {
DataTree->AddMember( Array, Member );
PrevMember = *Member;
Member = &((*Member)->Next);
}
// Check if more parameters to follow