Important Update:
- DataTree:
- Allow to read Null/String/Int/Float/Bool as anyone of the other types,
except Array/Object
This commit is contained in:
@@ -576,7 +576,8 @@ const long CDataTree::GetInt( TDataMember * BaseMember, const char * Path, long
|
||||
TDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( BaseMember, Path, Create )) && (Member->Type == jtInt)) {
|
||||
if ((Member = GetMember( BaseMember, Path, false )) &&
|
||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||
return strtol( Member->Value, NULL, 10 );
|
||||
}
|
||||
else if (Member && Create && (Member->Type == jtNull)) {
|
||||
@@ -596,7 +597,8 @@ const double CDataTree::GetFloat( TDataMember * BaseMember, const char * Path,
|
||||
TDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( BaseMember, Path, Create )) && (Member->Type == jtFloat)) {
|
||||
if ((Member = GetMember( BaseMember, Path, false )) &&
|
||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||
return strtod( Member->Value, NULL );
|
||||
}
|
||||
else if (Member && Create && (Member->Type == jtNull)) {
|
||||
@@ -616,10 +618,20 @@ const bool CDataTree::GetBool( TDataMember * BaseMember, const char * Path, boo
|
||||
TDataMember * Member;
|
||||
|
||||
// Validate
|
||||
if ((Member = GetMember( BaseMember, Path, Create )) && (Member->Type == jtBool)) {
|
||||
if ((Member = GetMember( BaseMember, Path, false ))) {
|
||||
if (Member->Type == jtString) {
|
||||
return ((!*Member->Value)? false : true);
|
||||
}
|
||||
else if (Member->Type == jtFloat) {
|
||||
return ((strtod( Member->Value, NULL ) == 0)? false : true );
|
||||
}
|
||||
else if (Member->Type == jtInt) {
|
||||
return ((strtol( Member->Value, NULL, 10 ) == 0)? false : true );
|
||||
}
|
||||
else if (Member->Type == jtBool) {
|
||||
return ((!strcasecmp( Member->Value, "0" ))? false : true );
|
||||
}
|
||||
else if (Member && Create && (Member->Type == jtNull)) {
|
||||
else if ((Member->Type == jtNull) && Create) {
|
||||
SetValue( Member, jtBool, ((Default)? "1" : "0") );
|
||||
return Default;
|
||||
}
|
||||
@@ -627,5 +639,9 @@ const bool CDataTree::GetBool( TDataMember * BaseMember, const char * Path, boo
|
||||
return Default;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return Default;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user