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;
|
||||
|
||||
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
|
||||
NewValue = (char *)malloc( sizeof(Member->Len+1) );
|
||||
NewValue = (char *)malloc( sizeof(Len+1) );
|
||||
if (Value) {
|
||||
memcpy( NewValue, Value, Len );
|
||||
} else {
|
||||
@@ -313,7 +323,7 @@ bool CDataTree::SetValue( TDataMember * Member, EDataType Type, const char * Va
|
||||
}
|
||||
else {
|
||||
// Set null value
|
||||
SetValuePtr( Member, Type, NULL, 0 );
|
||||
SetValuePtr( Member, Type, NULL, -1 );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -327,7 +337,24 @@ bool CDataTree::SetObject( TDataMember * BaseMember, const char * Path )
|
||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||
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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -340,12 +367,14 @@ bool CDataTree::SetStr( TDataMember * BaseMember, const char * Path, const char
|
||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create Value
|
||||
SetValue( Member, jtString, Value, Len );
|
||||
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;
|
||||
char ValueStr[20];
|
||||
@@ -354,13 +383,15 @@ bool CDataTree::SetInt( TDataMember * BaseMember, const char * Path, const long
|
||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||
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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
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;
|
||||
char ValueStr[20];
|
||||
@@ -369,8 +400,10 @@ bool CDataTree::SetFloat( TDataMember * BaseMember, const char * Path, const do
|
||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||
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;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -383,7 +416,9 @@ bool CDataTree::SetBool( TDataMember * BaseMember, const char * Path, const boo
|
||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
SetValue( Member, jtBool, ((Value == 0)? "0" : "1"), -1 );
|
||||
|
||||
// Create Value
|
||||
SetValue( Member, jtBool, ((Value == 0)? "0" : "1") );
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -396,7 +431,9 @@ bool CDataTree::SetNull( TDataMember * BaseMember, const char * Path )
|
||||
if (!(Member = GetMember( BaseMember, Path, true ))) {
|
||||
return false;
|
||||
}
|
||||
SetValue( Member, jtNull, NULL, -1 );
|
||||
|
||||
// Create Value
|
||||
SetValue( Member, jtNull, NULL );
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -422,7 +459,7 @@ const char * CDataTree::GetStr( TDataMember * BaseMember, const char * Path, con
|
||||
return Member->Value;
|
||||
}
|
||||
else if (Member && Create && (Member->Type == jtNull)) {
|
||||
SetValue( Member, jtString, Default, strlen(Default) );
|
||||
SetValue( Member, jtString, Default );
|
||||
return Default;
|
||||
}
|
||||
else {
|
||||
@@ -441,7 +478,7 @@ const char * CDataTree::GetStr( TDataMember * BaseMember, const char * Path, int
|
||||
return Member->Value;
|
||||
}
|
||||
else if (Member && Create && (Member->Type == jtNull)) {
|
||||
SetValue( Member, jtString, Default, strlen(Default) );
|
||||
SetValue( Member, jtString, Default );
|
||||
Len = Member->Len;
|
||||
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;
|
||||
|
||||
@@ -462,8 +499,8 @@ const long CDataTree::GetInt( TDataMember * BaseMember, const char * Path, long
|
||||
}
|
||||
else if (Member && Create && (Member->Type == jtNull)) {
|
||||
char TempStr[20];
|
||||
sprintf( TempStr, "%ld", Default );
|
||||
SetValue( Member, jtInt, TempStr, strlen(TempStr) );
|
||||
sprintf( TempStr, ((Mask)? Mask : "%ld"), Default );
|
||||
SetValue( Member, jtInt, TempStr );
|
||||
return Default;
|
||||
}
|
||||
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;
|
||||
|
||||
@@ -482,8 +519,8 @@ const double CDataTree::GetFloat( TDataMember * BaseMember, const char * Path,
|
||||
}
|
||||
else if (Member && Create && (Member->Type == jtNull)) {
|
||||
char TempStr[20];
|
||||
sprintf( TempStr, "%lf", Default );
|
||||
SetValue( Member, jtInt, TempStr, strlen(TempStr) );
|
||||
sprintf( TempStr, ((Mask)? Mask : "%lf"), Default );
|
||||
SetValue( Member, jtFloat, TempStr );
|
||||
return Default;
|
||||
}
|
||||
else {
|
||||
@@ -501,7 +538,7 @@ const bool CDataTree::GetBool( TDataMember * BaseMember, const char * Path, boo
|
||||
return ((!strcasecmp( Member->Value, "0" ))? false : true );
|
||||
}
|
||||
else if (Member && Create && (Member->Type == jtNull)) {
|
||||
SetValue( Member, jtInt, ((Default)? "1" : "0"), 1 );
|
||||
SetValue( Member, jtBool, ((Default)? "1" : "0") );
|
||||
return Default;
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user