Code compacting of JSON & DataTree:

- Remove excessive {}
DataTree:
- Use "p" prefix in funtion parameters to avoid object parameter overlap
This commit is contained in:
2021-09-05 09:25:00 +02:00
parent 0e6cbf6664
commit 1de6cc498c
3 changed files with 113 additions and 171 deletions

View File

@@ -31,9 +31,8 @@ CJSONparse::CJSONparse( CDataMember * pDataTree )
CJSONparse::~CJSONparse()
{
// Destroy buffer
if (Buffer) {
if (Buffer)
delete Buffer;
}
}
//---------------------------------------------------------------------------
@@ -118,9 +117,8 @@ bool CJSONparse::WriteToFile( const char * BasePath, const char * Path, const ch
if (Path && *Path) {
strcpy( FilePath, Path );
PathLen = strlen( FilePath );
if (FilePath[PathLen] != '/') {
if (FilePath[PathLen] != '/')
FilePath[PathLen++] = '/';
}
}
strcpy( &FilePath[PathLen], FileName );
@@ -215,9 +213,8 @@ bool CJSONparse::ReadFromFile( const char * BasePath, const char * Path, const c
if (Path && *Path) {
strcpy( FilePath, Path );
PathLen = strlen( FilePath );
if (FilePath[PathLen] != '/') {
if (FilePath[PathLen] != '/')
FilePath[PathLen++] = '/';
}
}
strcpy( &FilePath[PathLen], FileName );
@@ -347,8 +344,8 @@ bool CJSONparse::ReadFromBuffer( const char * BasePath )
BaseMember->Clear();
// Position Counters
LineNo = 1;
CharNo = 0;
LineNo = 1;
CharNo = 0;
// Parse Root Object
SkipWhiteSpace();
@@ -357,9 +354,8 @@ bool CJSONparse::ReadFromBuffer( const char * BasePath )
CharNo += BufPos-Mark;
sprintf( ErrorText, "First entry in file must be an Object or Array on line %d:%d", LineNo, CharNo );
}
if (Error) {
if (Error)
return false;
}
// Ensure remainder of file is empty
SkipWhiteSpace();
@@ -428,8 +424,7 @@ void CJSONparse::FreeBuffer()
void CJSONparse::SkipWhiteSpace()
{
while (true)
{
while (true) {
// Append buffer if required
if (!*BufPos && RefillBuffer)
FillBuffer();
@@ -458,9 +453,8 @@ bool CJSONparse::ParseString( char ** Value, int &Len )
char HexVal[5] = "";
// Check for opening quote
if (*BufPos != '"') {
if (*BufPos != '"')
return false;
}
// Clear values
*Value = NULL;
@@ -470,12 +464,12 @@ bool CJSONparse::ParseString( char ** Value, int &Len )
BufPos++;
// Check for closing quote
while (true)
{
while (true) {
// Check for special characters
if ((EndMark = strpbrk( BufPos, "\"\\\n\t\b\f\n\r" ))) { /*"\"/\\\n\t\b\f\n\r" (forward slash included)*/
BufPos = EndMark;
} else if (RefillBuffer) {
}
else if (RefillBuffer) {
FillBuffer();
continue;
}
@@ -492,9 +486,8 @@ bool CJSONparse::ParseString( char ** Value, int &Len )
}
else if (*BufPos == '\\') {
if (!*(BufPos+1) && RefillBuffer) {
if (FillBuffer()) {
if (FillBuffer())
continue;
}
}
if (*(BufPos+1) == 'u') {
for (EndMark = BufPos+2; EndMark < BufPos+6; EndMark++) {
@@ -538,8 +531,7 @@ bool CJSONparse::ParseString( char ** Value, int &Len )
// Convert value
BufPos = Mark+1;
while ((EndMark = strpbrk( BufPos, "\"\\" )))
{
while ((EndMark = strpbrk( BufPos, "\"\\" ))) {
// Copy portion
memcpy( ValuePos, BufPos, (EndMark-BufPos) );
ValuePos += (EndMark-BufPos);
@@ -586,16 +578,14 @@ bool CJSONparse::ParseObject( CDataMember * Object )
int Len = 0;
// Check for start of Object
if (*BufPos != '{') {
if (*BufPos != '{')
return false;
}
BufPos++;
// Set Type
Object->SetValue( jtObject );
while (true)
{
while (true) {
// Evaluate key name
SkipWhiteSpace();
if (*BufPos == '}') {
@@ -666,21 +656,18 @@ bool CJSONparse::ParseArray( CDataMember * Array )
CDataMember ** Member;
// Check for start of Object
if (*BufPos != '[') {
if (*BufPos != '[')
return false;
}
BufPos++;
// Set Type
Array->SetValue( jtArray );
Member = &(Array->FirstChild);
while (true)
{
while (true) {
// Look for Member Name
SkipWhiteSpace();
if (*BufPos == ']') {
if (*BufPos == ']')
break;
}
// Add new element
*Member = new CDataMember( Array );
@@ -724,9 +711,8 @@ bool CJSONparse::ParseString( CDataMember * Member )
int Len = 0;
// Try to parse
if (!ParseString( &Value, Len )) {
if (!ParseString( &Value, Len ))
return false;
}
// Set string
Member->SetValuePtr( jtString, Value, Len );
@@ -737,7 +723,6 @@ bool CJSONparse::ParseString( CDataMember * Member )
bool CJSONparse::ParsePrimitive( CDataMember * Member )
{
char * Value = NULL;
int Len = 0;
char * EndMark;
@@ -772,19 +757,13 @@ bool CJSONparse::ParsePrimitive( CDataMember * Member )
// Try conversion to int
strtol( Mark, &EndMark, 10 );
if (EndMark == BufPos) {
Value = (char*)malloc( Len+1 );
memcpy( Value, Mark, Len );
Value[Len] = 0;
Member->SetValuePtr( jtInt, Value, Len );
Member->SetValue( jtInt, Mark, Len );
}
else {
// Try conversion to float
strtod( Mark, &EndMark );
if (EndMark == BufPos) {
Value = (char*)malloc( Len+1 );
memcpy( Value, Mark, Len );
Value[Len] = 0;
Member->SetValuePtr( jtFloat, Value, Len );
Member->SetValue( jtFloat, Mark, Len );
}
else {
Error = true;
@@ -810,8 +789,7 @@ bool CJSONparse::PrintString( char * String, int Len )
// Content
BufPos = String;
while (true)
{
while (true) {
// Scan for special chars
Mark = BufPos;
while ((*BufPos >= 32) && (*BufPos <= 126) && (*BufPos != '\\') && /*(*BufPos != '/') &&*/ (*BufPos != '"'))
@@ -880,8 +858,7 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
}
// Save parameters
for (Member = Object->FirstChild; Member != NULL; (Member = Member->NextPeer))
{
for (Member = Object->FirstChild; Member != NULL; (Member = Member->NextPeer)) {
// Whitespace around first bracket
if (Indent) {
if (First) {
@@ -894,20 +871,21 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
}
// Print key name
if (!PrintString( Member->Name, strlen(Member->Name) ))
if (!PrintString( Member->Name, strlen(Member->Name) )) {
return false;
if (Indent) {
}
else if (Indent) {
if (Print( this, " : ", 3 ) < 0)
return false;
} else {
}
else {
if (Print( this, ":", 1 ) < 0)
return false;
}
// Print value
Last = (++Count >= Object->Len);
switch (Member->Type)
{
switch (Member->Type) {
case jtNull :
if (Print( this, "null", 4 ) < 0)
return false;
@@ -968,6 +946,7 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
}
if (Print( this, "}", 1 ) < 0)
return false;
return true;
}
//---------------------------------------------------------------------------
@@ -998,8 +977,7 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
}
// Save parameters
for (Member = Array->FirstChild; Member != NULL; (Member = Member->NextPeer))
{
for (Member = Array->FirstChild; Member != NULL; (Member = Member->NextPeer)) {
// Whitespace around brace
if (Indent) {
if (First) {
@@ -1012,8 +990,7 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
}
Last = (++Count >= Array->Len);
switch (Member->Type)
{
switch (Member->Type) {
case jtNull :
if (Print( this, "null", 4 ) < 0)
return false;