1
0

fix: c++ issues with pl_json.h

This commit is contained in:
Jonathan Hoffstadt 2025-04-11 21:58:00 -05:00
parent be504fc942
commit 9dac7bcc73

View File

@ -13,8 +13,8 @@
*/ */
// library version (format XYYZZ) // library version (format XYYZZ)
#define PL_JSON_VERSION "1.0.1" #define PL_JSON_VERSION "1.0.0"
#define PL_JSON_VERSION_NUM 10001 #define PL_JSON_VERSION_NUM 10000
/* /*
Index of this file: Index of this file:
@ -68,6 +68,7 @@ plJsonObject* pl_json_member_by_index(plJsonObject*, uint32_t uIndex);
void pl_json_member_list (plJsonObject*, char** pcListOut, uint32_t* puSizeOut, uint32_t* puLength); void pl_json_member_list (plJsonObject*, char** pcListOut, uint32_t* puSizeOut, uint32_t* puLength);
bool pl_json_member_exist (plJsonObject*, const char* pcName); bool pl_json_member_exist (plJsonObject*, const char* pcName);
plJsonType pl_json_get_type (plJsonObject*); plJsonType pl_json_get_type (plJsonObject*);
const char* pl_json_get_name (plJsonObject*);
// retrieve and cast values (default used if member isn't present) // retrieve and cast values (default used if member isn't present)
int pl_json_int_member (plJsonObject*, const char* pcName, int iDefaultValue); int pl_json_int_member (plJsonObject*, const char* pcName, int iDefaultValue);
@ -114,12 +115,12 @@ void pl_json_add_bool_member (plJsonObject*, const char* pcName, bool);
void pl_json_add_string_member(plJsonObject*, const char* pcName, const char*); void pl_json_add_string_member(plJsonObject*, const char* pcName, const char*);
// arrays // arrays
void pl_json_add_int_array (plJsonObject*, const char* pcName, int*, uint32_t uCount); void pl_json_add_int_array (plJsonObject*, const char* pcName, const int*, uint32_t uCount);
void pl_json_add_uint_array (plJsonObject*, const char* pcName, uint32_t*, uint32_t uCount); void pl_json_add_uint_array (plJsonObject*, const char* pcName, const uint32_t*, uint32_t uCount);
void pl_json_add_float_array (plJsonObject*, const char* pcName, float*, uint32_t uCount); void pl_json_add_float_array (plJsonObject*, const char* pcName, const float*, uint32_t uCount);
void pl_json_add_double_array(plJsonObject*, const char* pcName, double*, uint32_t uCount); void pl_json_add_double_array(plJsonObject*, const char* pcName, const double*, uint32_t uCount);
void pl_json_add_bool_array (plJsonObject*, const char* pcName, bool*, uint32_t uCount); void pl_json_add_bool_array (plJsonObject*, const char* pcName, const bool*, uint32_t uCount);
void pl_json_add_string_array(plJsonObject*, const char* pcName, char**, uint32_t uCount); void pl_json_add_string_array(plJsonObject*, const char* pcName, const char**, uint32_t uCount);
// objects & object arrays // objects & object arrays
plJsonObject* pl_json_add_member (plJsonObject*, const char* pcName); // returns object to be modified with above commands plJsonObject* pl_json_add_member (plJsonObject*, const char* pcName); // returns object to be modified with above commands
@ -144,7 +145,7 @@ enum plJsonType_
#ifdef PL_JSON_IMPLEMENTATION #ifdef PL_JSON_IMPLEMENTATION
#ifndef PL_GLTF_EXTENSION_H #ifndef CGLTF_IMPLEMENTATION
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// [SECTION] jsmn.h // [SECTION] jsmn.h
@ -709,7 +710,7 @@ static void pl__check_json_object(plJsonObject* ptJson, uint32_t* puBuffer
plJsonObject* plJsonObject*
pl_json_new_root_object(const char* pcName) pl_json_new_root_object(const char* pcName)
{ {
plJsonObject* ptJson = PL_JSON_ALLOC(sizeof(plJsonObject)); plJsonObject* ptJson = (plJsonObject*)PL_JSON_ALLOC(sizeof(plJsonObject));
memset(ptJson, 0, sizeof(plJsonObject)); memset(ptJson, 0, sizeof(plJsonObject));
ptJson->tType = PL_JSON_TYPE_OBJECT; ptJson->tType = PL_JSON_TYPE_OBJECT;
ptJson->ptRootObject = ptJson; ptJson->ptRootObject = ptJson;
@ -757,9 +758,14 @@ pl_load_json(const char* pcJson, plJsonObject** pptJsonOut)
uint32_t uLayer = 0; uint32_t uLayer = 0;
uint32_t uCurrentTokenIndex = 0; uint32_t uCurrentTokenIndex = 0;
plJsonObject** sbtObjectStack = NULL; plJsonObject** sbtObjectStack = NULL;
*pptJsonOut = PL_JSON_ALLOC(sizeof(plJsonObject)); *pptJsonOut = (plJsonObject*)PL_JSON_ALLOC(sizeof(plJsonObject));
memset(*pptJsonOut, 0, sizeof(plJsonObject)); memset(*pptJsonOut, 0, sizeof(plJsonObject));
plJsonObject* ptJsonOut = *pptJsonOut; plJsonObject* ptJsonOut = *pptJsonOut;
if(ptJsonOut == NULL)
{
pl_sb_json_free(sbtTokens);
return false;
}
ptJsonOut->ptRootObject = ptJsonOut; ptJsonOut->ptRootObject = ptJsonOut;
pl_sb_json_reserve(ptJsonOut->sbcBuffer, strlen(pcJson)); pl_sb_json_reserve(ptJsonOut->sbcBuffer, strlen(pcJson));
ptJsonOut->tType = pl__get_json_token_object_type(pcJson, &sbtTokens[uCurrentTokenIndex]); ptJsonOut->tType = pl__get_json_token_object_type(pcJson, &sbtTokens[uCurrentTokenIndex]);
@ -791,19 +797,19 @@ pl_load_json(const char* pcJson, plJsonObject** pptJsonOut)
if(ptParentObject->tType == PL_JSON_TYPE_ARRAY) if(ptParentObject->tType == PL_JSON_TYPE_ARRAY)
{ {
const uint32_t uBufferLocation = pl_sb_json_size(ptJsonOut->sbcBuffer); const uint32_t uBufferLocation = pl_sb_json_size(ptJsonOut->sbcBuffer);
pl_sb_json_resize(ptJsonOut->sbcBuffer, uBufferLocation + ptCurrentToken->end - ptCurrentToken->start + 1); pl_sb_json_resize(ptJsonOut->sbcBuffer, (uint32_t)(uBufferLocation + ptCurrentToken->end - ptCurrentToken->start + 1));
memcpy(&ptJsonOut->sbcBuffer[uBufferLocation], &pcJson[ptCurrentToken->start], ptCurrentToken->end - ptCurrentToken->start); memcpy(&ptJsonOut->sbcBuffer[uBufferLocation], &pcJson[ptCurrentToken->start], ptCurrentToken->end - ptCurrentToken->start);
pl_sb_json_push(ptParentObject->sbuValueOffsets, uBufferLocation); pl_sb_json_push(ptParentObject->sbuValueOffsets, uBufferLocation);
pl_sb_json_push(ptParentObject->sbuValueLength, ptCurrentToken->end - ptCurrentToken->start); pl_sb_json_push(ptParentObject->sbuValueLength, (uint32_t)(ptCurrentToken->end - ptCurrentToken->start));
ptParentObject->uChildrenFound++; ptParentObject->uChildrenFound++;
} }
else else
{ {
const uint32_t uBufferLocation = pl_sb_json_size(ptJsonOut->sbcBuffer); const uint32_t uBufferLocation = pl_sb_json_size(ptJsonOut->sbcBuffer);
pl_sb_json_resize(ptJsonOut->sbcBuffer, uBufferLocation + ptCurrentToken->end - ptCurrentToken->start + 1); pl_sb_json_resize(ptJsonOut->sbcBuffer, (uint32_t)(uBufferLocation + ptCurrentToken->end - ptCurrentToken->start + 1));
memcpy(&ptJsonOut->sbcBuffer[uBufferLocation], &pcJson[ptCurrentToken->start], ptCurrentToken->end - ptCurrentToken->start); memcpy(&ptJsonOut->sbcBuffer[uBufferLocation], &pcJson[ptCurrentToken->start], ptCurrentToken->end - ptCurrentToken->start);
ptParentObject->uValueOffset = uBufferLocation; ptParentObject->uValueOffset = uBufferLocation;
ptParentObject->uValueLength = ptCurrentToken->end - ptCurrentToken->start; ptParentObject->uValueLength = (uint32_t)(ptCurrentToken->end - ptCurrentToken->start);
ptParentObject->uChildrenFound++; ptParentObject->uChildrenFound++;
pl_sb_json_pop(sbtObjectStack); pl_sb_json_pop(sbtObjectStack);
} }
@ -817,19 +823,19 @@ pl_load_json(const char* pcJson, plJsonObject** pptJsonOut)
if(ptParentObject->tType == PL_JSON_TYPE_ARRAY) if(ptParentObject->tType == PL_JSON_TYPE_ARRAY)
{ {
const uint32_t uBufferLocation = pl_sb_json_size(ptJsonOut->sbcBuffer); const uint32_t uBufferLocation = pl_sb_json_size(ptJsonOut->sbcBuffer);
pl_sb_json_resize(ptJsonOut->sbcBuffer, uBufferLocation + ptCurrentToken->end - ptCurrentToken->start + 1); pl_sb_json_resize(ptJsonOut->sbcBuffer, (uint32_t)(uBufferLocation + ptCurrentToken->end - ptCurrentToken->start + 1));
memcpy(&ptJsonOut->sbcBuffer[uBufferLocation], &pcJson[ptCurrentToken->start], ptCurrentToken->end - ptCurrentToken->start); memcpy(&ptJsonOut->sbcBuffer[uBufferLocation], &pcJson[ptCurrentToken->start], ptCurrentToken->end - ptCurrentToken->start);
pl_sb_json_push(ptParentObject->sbuValueOffsets, uBufferLocation); pl_sb_json_push(ptParentObject->sbuValueOffsets, uBufferLocation);
pl_sb_json_push(ptParentObject->sbuValueLength, ptCurrentToken->end - ptCurrentToken->start); pl_sb_json_push(ptParentObject->sbuValueLength, (uint32_t)(ptCurrentToken->end - ptCurrentToken->start));
ptParentObject->uChildrenFound++; ptParentObject->uChildrenFound++;
} }
else else
{ {
const uint32_t uBufferLocation = pl_sb_json_size(ptJsonOut->sbcBuffer); const uint32_t uBufferLocation = pl_sb_json_size(ptJsonOut->sbcBuffer);
pl_sb_json_resize(ptJsonOut->sbcBuffer, uBufferLocation + ptCurrentToken->end - ptCurrentToken->start + 1); pl_sb_json_resize(ptJsonOut->sbcBuffer, (uint32_t)(uBufferLocation + ptCurrentToken->end - ptCurrentToken->start + 1));
memcpy(&ptJsonOut->sbcBuffer[uBufferLocation], &pcJson[ptCurrentToken->start], ptCurrentToken->end - ptCurrentToken->start); memcpy(&ptJsonOut->sbcBuffer[uBufferLocation], &pcJson[ptCurrentToken->start], ptCurrentToken->end - ptCurrentToken->start);
ptParentObject->uValueOffset = uBufferLocation; ptParentObject->uValueOffset = uBufferLocation;
ptParentObject->uValueLength = ptCurrentToken->end - ptCurrentToken->start; ptParentObject->uValueLength = (uint32_t)(ptCurrentToken->end - ptCurrentToken->start);
ptParentObject->uChildrenFound++; ptParentObject->uChildrenFound++;
pl_sb_json_pop(sbtObjectStack); pl_sb_json_pop(sbtObjectStack);
} }
@ -1042,6 +1048,12 @@ pl_json_get_type(plJsonObject* ptJson)
return ptJson->tType; return ptJson->tType;
} }
const char*
pl_json_get_name(plJsonObject* ptJson)
{
return ptJson->acName;
}
bool bool
pl_json_member_exist(plJsonObject* ptJson, const char* pcName) pl_json_member_exist(plJsonObject* ptJson, const char* pcName)
{ {
@ -1535,7 +1547,7 @@ pl_json_add_member_array(plJsonObject* ptJson, const char* pcName, uint32_t uSiz
} }
void void
pl_json_add_int_array(plJsonObject* ptJson, const char* pcName, int* piValues, uint32_t uSize) pl_json_add_int_array(plJsonObject* ptJson, const char* pcName, const int* piValues, uint32_t uSize)
{ {
ptJson->uChildCount++; ptJson->uChildCount++;
ptJson->uChildrenFound++; ptJson->uChildrenFound++;
@ -1569,7 +1581,7 @@ pl_json_add_int_array(plJsonObject* ptJson, const char* pcName, int* piValues, u
} }
void void
pl_json_add_uint_array(plJsonObject* ptJson, const char* pcName, uint32_t* puValues, uint32_t uSize) pl_json_add_uint_array(plJsonObject* ptJson, const char* pcName, const uint32_t* puValues, uint32_t uSize)
{ {
ptJson->uChildCount++; ptJson->uChildCount++;
ptJson->uChildrenFound++; ptJson->uChildrenFound++;
@ -1603,7 +1615,7 @@ pl_json_add_uint_array(plJsonObject* ptJson, const char* pcName, uint32_t* puVal
} }
void void
pl_json_add_float_array(plJsonObject* ptJson, const char* pcName, float* pfValues, uint32_t uSize) pl_json_add_float_array(plJsonObject* ptJson, const char* pcName, const float* pfValues, uint32_t uSize)
{ {
ptJson->uChildCount++; ptJson->uChildCount++;
ptJson->uChildrenFound++; ptJson->uChildrenFound++;
@ -1637,7 +1649,7 @@ pl_json_add_float_array(plJsonObject* ptJson, const char* pcName, float* pfValue
} }
void void
pl_json_add_double_array(plJsonObject* ptJson, const char* pcName, double* pdValues, uint32_t uSize) pl_json_add_double_array(plJsonObject* ptJson, const char* pcName, const double* pdValues, uint32_t uSize)
{ {
ptJson->uChildCount++; ptJson->uChildCount++;
ptJson->uChildrenFound++; ptJson->uChildrenFound++;
@ -1671,7 +1683,7 @@ pl_json_add_double_array(plJsonObject* ptJson, const char* pcName, double* pdVal
} }
void void
pl_json_add_bool_array(plJsonObject* ptJson, const char* pcName, bool* pbValues, uint32_t uSize) pl_json_add_bool_array(plJsonObject* ptJson, const char* pcName, const bool* pbValues, uint32_t uSize)
{ {
ptJson->uChildCount++; ptJson->uChildCount++;
ptJson->uChildrenFound++; ptJson->uChildrenFound++;
@ -1705,7 +1717,7 @@ pl_json_add_bool_array(plJsonObject* ptJson, const char* pcName, bool* pbValues,
} }
void void
pl_json_add_string_array(plJsonObject* ptJson, const char* pcName, char** ppcBuffer, uint32_t uSize) pl_json_add_string_array(plJsonObject* ptJson, const char* pcName, const char** ppcBuffer, uint32_t uSize)
{ {
ptJson->uChildCount++; ptJson->uChildCount++;
ptJson->uChildrenFound++; ptJson->uChildrenFound++;
@ -1860,7 +1872,7 @@ pl__write_json_object(plJsonObject* ptJson, char* pcBuffer, uint32_t* puBufferSi
const char* pcPrevChar = &ptJson->ptRootObject->sbcBuffer[ptJson->sbuValueOffsets[i]]; const char* pcPrevChar = &ptJson->ptRootObject->sbcBuffer[ptJson->sbuValueOffsets[i]];
char cPreviousChar = ' '; char cPreviousChar = ' ';
if(pcPrevChar) // if(pcPrevChar)
{ {
const char* pcPrevCharAddr = pcPrevChar - 1; const char* pcPrevCharAddr = pcPrevChar - 1;
cPreviousChar = pcPrevCharAddr[0]; cPreviousChar = pcPrevCharAddr[0];
@ -2000,7 +2012,7 @@ pl__check_json_object(plJsonObject* ptJson, uint32_t* puBufferSize, uint32_t* pu
const char* pcPrevChar = &ptJson->ptRootObject->sbcBuffer[ptJson->sbuValueOffsets[i]]; const char* pcPrevChar = &ptJson->ptRootObject->sbcBuffer[ptJson->sbuValueOffsets[i]];
char cPreviousChar = ' '; char cPreviousChar = ' ';
if(pcPrevChar) // if(pcPrevChar)
{ {
const char* pcPrevCharAddr = pcPrevChar - 1; const char* pcPrevCharAddr = pcPrevChar - 1;
cPreviousChar = pcPrevCharAddr[0]; cPreviousChar = pcPrevCharAddr[0];