From c1b111e1969e5591b9bdb171f7cdad0e846ba824 Mon Sep 17 00:00:00 2001 From: Charl Wentzel Date: Mon, 20 Nov 2017 07:41:51 +0200 Subject: [PATCH] Important Update: - DataTree: - Allow to read Null/String/Int/Float/Bool as anyone of the other types, except Array/Object --- DataTreeCore.cpp | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) 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;