Minor Update:
- Pass printf Mask for Int/Float values on Get/Set methods - On GetValue use mask for default value - Add SetArray() method - Bug fix: Incorrect malloc size in SetValue() - Bug fix: Len not calculated if -1 passed to SetValue() - Set default value for Len = -1 on SetValue() methods - Don't pass Len to SetValue() unless required
This commit is contained in:
@@ -295,14 +295,24 @@ bool CDataTree::SetValuePtr( TDataMember * Member, EDataType Type, char * Value
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataTree::SetValue( TDataMember * Member, EDataType Type, const char * Value, const int Len )
|
bool CDataTree::SetValue( TDataMember * Member, EDataType Type, const char * Value, int Len )
|
||||||
{
|
{
|
||||||
char * NewValue = NULL;
|
char * NewValue = NULL;
|
||||||
|
|
||||||
if ((Type == jtString) || (Type == jtFloat) || (Type == jtInt) || (Type == jtBool))
|
if ((Type == jtString) || (Type == jtFloat) || (Type == jtInt) || (Type == jtBool))
|
||||||
{
|
{
|
||||||
|
// Validate
|
||||||
|
if (!Value) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check Length
|
||||||
|
if (Len == -1) {
|
||||||
|
Len = strlen( Value );
|
||||||
|
}
|
||||||
|
|
||||||
// Create copy of value
|
// Create copy of value
|
||||||
NewValue = (char *)malloc( sizeof(Member->Len+1) );
|
NewValue = (char *)malloc( sizeof(Len+1) );
|
||||||
if (Value) {
|
if (Value) {
|
||||||
memcpy( NewValue, Value, Len );
|
memcpy( NewValue, Value, Len );
|
||||||
} else {
|
} else {
|
||||||
@@ -313,7 +323,7 @@ bool CDataTree::SetValue( TDataMember * Member, EDataType Type, const char * Va
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Set null value
|
// Set null value
|
||||||
SetValuePtr( Member, Type, NULL, 0 );
|
SetValuePtr( Member, Type, NULL, -1 );
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -327,7 +337,24 @@ bool CDataTree::SetObject( TDataMember * BaseMember, const char * Path )
|
|||||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SetValue( Member, jtObject, NULL, -1 );
|
|
||||||
|
// Set as Object
|
||||||
|
SetValue( Member, jtObject, NULL );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool CDataTree::SetArray( TDataMember * BaseMember, const char * Path )
|
||||||
|
{
|
||||||
|
TDataMember * Member;
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set as Object
|
||||||
|
SetValue( Member, jtArray, NULL );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -340,12 +367,14 @@ bool CDataTree::SetStr( TDataMember * BaseMember, const char * Path, const char
|
|||||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create Value
|
||||||
SetValue( Member, jtString, Value, Len );
|
SetValue( Member, jtString, Value, Len );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataTree::SetInt( TDataMember * BaseMember, const char * Path, const long Value )
|
bool CDataTree::SetInt( TDataMember * BaseMember, const char * Path, const long Value, const char * Mask )
|
||||||
{
|
{
|
||||||
TDataMember * Member;
|
TDataMember * Member;
|
||||||
char ValueStr[20];
|
char ValueStr[20];
|
||||||
@@ -354,13 +383,15 @@ bool CDataTree::SetInt( TDataMember * BaseMember, const char * Path, const long
|
|||||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
sprintf( ValueStr, "%ld", Value );
|
|
||||||
SetValue( Member, jtInt, ValueStr, -1 );
|
// Create Value
|
||||||
|
sprintf( ValueStr, ((Mask)? Mask : "%ld"), Value );
|
||||||
|
SetValue( Member, jtInt, ValueStr );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataTree::SetFloat( TDataMember * BaseMember, const char * Path, const double Value )
|
bool CDataTree::SetFloat( TDataMember * BaseMember, const char * Path, const double Value, const char * Mask )
|
||||||
{
|
{
|
||||||
TDataMember * Member;
|
TDataMember * Member;
|
||||||
char ValueStr[20];
|
char ValueStr[20];
|
||||||
@@ -369,8 +400,10 @@ bool CDataTree::SetFloat( TDataMember * BaseMember, const char * Path, const do
|
|||||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
sprintf( ValueStr, "%lf", Value );
|
|
||||||
SetValue( Member, jtFloat, ValueStr, -1 );
|
// Create Value
|
||||||
|
sprintf( ValueStr, ((Mask)? Mask : "%lf"), Value );
|
||||||
|
SetValue( Member, jtFloat, ValueStr );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -383,7 +416,9 @@ bool CDataTree::SetBool( TDataMember * BaseMember, const char * Path, const boo
|
|||||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SetValue( Member, jtBool, ((Value == 0)? "0" : "1"), -1 );
|
|
||||||
|
// Create Value
|
||||||
|
SetValue( Member, jtBool, ((Value == 0)? "0" : "1") );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -396,7 +431,9 @@ bool CDataTree::SetNull( TDataMember * BaseMember, const char * Path )
|
|||||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SetValue( Member, jtNull, NULL, -1 );
|
|
||||||
|
// Create Value
|
||||||
|
SetValue( Member, jtNull, NULL );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -422,7 +459,7 @@ const char * CDataTree::GetStr( TDataMember * BaseMember, const char * Path, con
|
|||||||
return Member->Value;
|
return Member->Value;
|
||||||
}
|
}
|
||||||
else if (Member && Create && (Member->Type == jtNull)) {
|
else if (Member && Create && (Member->Type == jtNull)) {
|
||||||
SetValue( Member, jtString, Default, strlen(Default) );
|
SetValue( Member, jtString, Default );
|
||||||
return Default;
|
return Default;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -441,7 +478,7 @@ const char * CDataTree::GetStr( TDataMember * BaseMember, const char * Path, int
|
|||||||
return Member->Value;
|
return Member->Value;
|
||||||
}
|
}
|
||||||
else if (Member && Create && (Member->Type == jtNull)) {
|
else if (Member && Create && (Member->Type == jtNull)) {
|
||||||
SetValue( Member, jtString, Default, strlen(Default) );
|
SetValue( Member, jtString, Default );
|
||||||
Len = Member->Len;
|
Len = Member->Len;
|
||||||
return Default;
|
return Default;
|
||||||
}
|
}
|
||||||
@@ -452,7 +489,7 @@ const char * CDataTree::GetStr( TDataMember * BaseMember, const char * Path, int
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
const long CDataTree::GetInt( TDataMember * BaseMember, const char * Path, long Default, bool Create )
|
const long CDataTree::GetInt( TDataMember * BaseMember, const char * Path, long Default, bool Create, const char * Mask )
|
||||||
{
|
{
|
||||||
TDataMember * Member;
|
TDataMember * Member;
|
||||||
|
|
||||||
@@ -462,8 +499,8 @@ const long CDataTree::GetInt( TDataMember * BaseMember, const char * Path, long
|
|||||||
}
|
}
|
||||||
else if (Member && Create && (Member->Type == jtNull)) {
|
else if (Member && Create && (Member->Type == jtNull)) {
|
||||||
char TempStr[20];
|
char TempStr[20];
|
||||||
sprintf( TempStr, "%ld", Default );
|
sprintf( TempStr, ((Mask)? Mask : "%ld"), Default );
|
||||||
SetValue( Member, jtInt, TempStr, strlen(TempStr) );
|
SetValue( Member, jtInt, TempStr );
|
||||||
return Default;
|
return Default;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -472,7 +509,7 @@ const long CDataTree::GetInt( TDataMember * BaseMember, const char * Path, long
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
const double CDataTree::GetFloat( TDataMember * BaseMember, const char * Path, double Default, bool Create )
|
const double CDataTree::GetFloat( TDataMember * BaseMember, const char * Path, double Default, bool Create, const char * Mask )
|
||||||
{
|
{
|
||||||
TDataMember * Member;
|
TDataMember * Member;
|
||||||
|
|
||||||
@@ -482,8 +519,8 @@ const double CDataTree::GetFloat( TDataMember * BaseMember, const char * Path,
|
|||||||
}
|
}
|
||||||
else if (Member && Create && (Member->Type == jtNull)) {
|
else if (Member && Create && (Member->Type == jtNull)) {
|
||||||
char TempStr[20];
|
char TempStr[20];
|
||||||
sprintf( TempStr, "%lf", Default );
|
sprintf( TempStr, ((Mask)? Mask : "%lf"), Default );
|
||||||
SetValue( Member, jtInt, TempStr, strlen(TempStr) );
|
SetValue( Member, jtFloat, TempStr );
|
||||||
return Default;
|
return Default;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -501,7 +538,7 @@ const bool CDataTree::GetBool( TDataMember * BaseMember, const char * Path, boo
|
|||||||
return ((!strcasecmp( Member->Value, "0" ))? false : true );
|
return ((!strcasecmp( Member->Value, "0" ))? false : true );
|
||||||
}
|
}
|
||||||
else if (Member && Create && (Member->Type == jtNull)) {
|
else if (Member && Create && (Member->Type == jtNull)) {
|
||||||
SetValue( Member, jtInt, ((Default)? "1" : "0"), 1 );
|
SetValue( Member, jtBool, ((Default)? "1" : "0") );
|
||||||
return Default;
|
return Default;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ private:
|
|||||||
TDataMember ** GetMemberPtr( TDataMember * BaseMember, const char * Path, bool Create, TDataMember ** Parent = NULL );
|
TDataMember ** GetMemberPtr( TDataMember * BaseMember, const char * Path, bool Create, TDataMember ** Parent = NULL );
|
||||||
|
|
||||||
// Set Member value
|
// Set Member value
|
||||||
bool SetValue( TDataMember * Member, EDataType Type, const char * Value, const int Len );
|
bool SetValue( TDataMember * Member, EDataType Type, const char * Value = NULL, int Len = -1 );
|
||||||
bool SetValuePtr( TDataMember * Member, EDataType Type, char * Value, int Len );
|
bool SetValuePtr( TDataMember * Member, EDataType Type, char * Value, int Len );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -68,14 +68,15 @@ public:
|
|||||||
|
|
||||||
const char * GetStr( TDataMember * BaseMember, const char * Path, const char * Default = NULL, bool Create = false );
|
const char * GetStr( TDataMember * BaseMember, const char * Path, const char * Default = NULL, bool Create = false );
|
||||||
const char * GetStr( TDataMember * BaseMember, const char * Path, int &Len, const char * Default = NULL, bool Create = false );
|
const char * GetStr( TDataMember * BaseMember, const char * Path, int &Len, const char * Default = NULL, bool Create = false );
|
||||||
const long GetInt( TDataMember * BaseMember, const char * Path, long Default = 0, bool Create = false );
|
const long GetInt( TDataMember * BaseMember, const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL );
|
||||||
const double GetFloat( TDataMember * BaseMember, const char * Path, double Default = 0.0, bool Create = false );
|
const double GetFloat( TDataMember * BaseMember, const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL );
|
||||||
const bool GetBool( TDataMember * BaseMember, const char * Path, bool Default = false, bool Create = false );
|
const bool GetBool( TDataMember * BaseMember, const char * Path, bool Default = false, bool Create = false );
|
||||||
|
|
||||||
bool SetObject( TDataMember * BaseMember, const char * Path );
|
bool SetObject( TDataMember * BaseMember, const char * Path );
|
||||||
|
bool SetArray( TDataMember * BaseMember, const char * Path );
|
||||||
bool SetStr( TDataMember * BaseMember, const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values
|
bool SetStr( TDataMember * BaseMember, const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values
|
||||||
bool SetInt( TDataMember * BaseMember, const char * Path, const long Value );
|
bool SetInt( TDataMember * BaseMember, const char * Path, const long Value, const char * Mask = NULL );
|
||||||
bool SetFloat( TDataMember * BaseMember, const char * Path, const double Value );
|
bool SetFloat( TDataMember * BaseMember, const char * Path, const double Value, const char * Mask = NULL );
|
||||||
bool SetBool( TDataMember * BaseMember, const char * Path, const bool Value );
|
bool SetBool( TDataMember * BaseMember, const char * Path, const bool Value );
|
||||||
bool SetNull( TDataMember * BaseMember, const char * Path );
|
bool SetNull( TDataMember * BaseMember, const char * Path );
|
||||||
|
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ bool CJSONparse::ParseObject( TDataMember * Object )
|
|||||||
|
|
||||||
// Set Type
|
// Set Type
|
||||||
Level++;
|
Level++;
|
||||||
DataTree->SetValue( Object, jtObject, NULL, -1 );
|
DataTree->SetValue( Object, jtObject );
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
@@ -340,7 +340,7 @@ bool CJSONparse::ParseArray( TDataMember * Array )
|
|||||||
|
|
||||||
// Set Type
|
// Set Type
|
||||||
Level++;
|
Level++;
|
||||||
DataTree->SetValue( Array, jtArray, NULL, -1 );
|
DataTree->SetValue( Array, jtArray );
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
@@ -438,10 +438,10 @@ bool CJSONparse::ParsePrimitive( TDataMember * Member )
|
|||||||
DataTree->SetValuePtr( Member, jtNull, NULL, -1 );
|
DataTree->SetValuePtr( Member, jtNull, NULL, -1 );
|
||||||
}
|
}
|
||||||
else if ((Len == 4) && !strncasecmp( Mark, "true", 4 )) {
|
else if ((Len == 4) && !strncasecmp( Mark, "true", 4 )) {
|
||||||
DataTree->SetValue( Member, jtBool, "1", 1 );
|
DataTree->SetValue( Member, jtBool, "1" );
|
||||||
}
|
}
|
||||||
else if ((Len == 5) && !strncasecmp( Mark, "false", 5 )) {
|
else if ((Len == 5) && !strncasecmp( Mark, "false", 5 )) {
|
||||||
DataTree->SetValue( Member, jtBool, "0", 1 );
|
DataTree->SetValue( Member, jtBool, "0" );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Try conversion to int
|
// Try conversion to int
|
||||||
|
|||||||
Reference in New Issue
Block a user