From 297940ff7c6562676130a94ea40888ee48bee7b3 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Mon, 12 Apr 2021 18:49:34 +0200 Subject: [PATCH] fix in SpaceParser when parsing json format: floating point values such as 1.123e+01 where not correctly parsed ('+' character was not correctly parsed) added to Space: some methods for searching a field with ignoring case: Space * get_object_field_nc(const wchar_t * field) Space * get_object_field_nc(const std::wstring & field); const Space * get_object_field_nc(const wchar_t * field) const; const Space * get_object_field_nc(const std::wstring & field) const; --- space/space.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++ space/space.h | 8 +++++++ space/spaceparser.cpp | 2 +- 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/space/space.cpp b/space/space.cpp index 6130e69..c1611a9 100644 --- a/space/space.cpp +++ b/space/space.cpp @@ -1602,6 +1602,61 @@ const Space::TableType * Space::get_table(const wchar_t * field) const + + +Space * Space::get_object_field_nc(const wchar_t * field) +{ + if( is_object() ) + { + ObjectType::iterator i = value.value_object.begin(); + + while( i != value.value_object.end() ) + { + if( EqualNoCase(field, i->first.c_str()) ) + { + return i->second; + } + } + } + + return nullptr; +} + + +Space * Space::get_object_field_nc(const std::wstring & field) +{ + return get_object_field_nc(field.c_str()); +} + + +const Space * Space::get_object_field_nc(const wchar_t * field) const +{ + if( is_object() ) + { + ObjectType::const_iterator i = value.value_object.cbegin(); + + while( i != value.value_object.cend() ) + { + if( EqualNoCase(field, i->first.c_str()) ) + { + return i->second; + } + } + } + + return nullptr; +} + + +const Space * Space::get_object_field_nc(const std::wstring & field) const +{ + return get_object_field_nc(field.c_str()); +} + + + + + void Space::remove(const wchar_t * field) { remove(std::wstring(field)); diff --git a/space/space.h b/space/space.h index e8e2c88..12c6e6f 100644 --- a/space/space.h +++ b/space/space.h @@ -470,6 +470,14 @@ public: // add these getters with std::wstring + // no case, has O(n) complexity + Space * get_object_field_nc(const wchar_t * field); + Space * get_object_field_nc(const std::wstring & field); + const Space * get_object_field_nc(const wchar_t * field) const; + const Space * get_object_field_nc(const std::wstring & field) const; + + + // remove a field from an object void remove(const wchar_t * field); void remove(const std::wstring & field); diff --git a/space/spaceparser.cpp b/space/spaceparser.cpp index 4e19a10..3c8f9bd 100644 --- a/space/spaceparser.cpp +++ b/space/spaceparser.cpp @@ -737,7 +737,7 @@ bool SpaceParser::is_alfa_numeric_char(int c) return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || - c == '.' || c=='-'; + c == '.' || c=='-' || c=='+'; }