diff --git a/DataTreeCore.cpp b/DataTreeCore.cpp index 5643b59..597ad88 100644 --- a/DataTreeCore.cpp +++ b/DataTreeCore.cpp @@ -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,12 +618,26 @@ const bool CDataTree::GetBool( TDataMember * BaseMember, const char * Path, boo TDataMember * Member; // Validate - if ((Member = GetMember( BaseMember, Path, Create )) && (Member->Type == jtBool)) { - return ((!strcasecmp( Member->Value, "0" ))? false : true ); - } - else if (Member && Create && (Member->Type == jtNull)) { - SetValue( Member, jtBool, ((Default)? "1" : "0") ); - return Default; + 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->Type == jtNull) && Create) { + SetValue( Member, jtBool, ((Default)? "1" : "0") ); + return Default; + } + else { + return Default; + } } else { return Default;