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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user