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:
Charl Wentzel
2017-11-20 07:41:51 +02:00
parent 7ef3d71af9
commit c1b111e196

View File

@@ -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;
}
}
//---------------------------------------------------------------------------