// Copyright Benoit Blanchon 2014-2017 // MIT License // // Arduino JSON library // https://bblanchon.github.io/ArduinoJson/ // If you like this project, please add a star! #pragma once #include "../JsonVariantBase.hpp" #include "../StringTraits/StringTraits.hpp" #include "../TypeTraits/EnableIf.hpp" namespace ArduinoJson { namespace Internals { template struct JsonVariantComparer {}; template struct JsonVariantComparer< TString, typename TypeTraits::EnableIf::value>::type> { template static bool equals(const JsonVariantBase &variant, const TString &comparand) { const char *value = variant.template as(); return Internals::StringTraits::equals(comparand, value); } }; template struct JsonVariantComparer< TComparand, typename TypeTraits::EnableIf< !TypeTraits::IsVariant::value && !TypeTraits::IsString::value>::type> { template static bool equals(const JsonVariantBase &variant, const TComparand &comparand) { return variant.template as() == comparand; } }; template struct JsonVariantComparer::value>::type> { template static bool equals(const JsonVariantBase &left, const TVariant2 &right) { if (left.template is() && right.template is()) return left.template as() == right.template as(); if (left.template is() && right.template is()) return left.template as() == right.template as(); if (left.template is() && right.template is()) return left.template as() == right.template as(); if (left.template is() && right.template is()) return left.template as() == right.template as(); if (left.template is() && right.template is()) return left.template as() == right.template as(); if (left.template is() && right.template is()) return strcmp(left.template as(), right.template as()) == 0; return false; } }; } }