// Copyright Benoit Blanchon 2014-2017 // MIT License // // Arduino JSON library // https://github.com/bblanchon/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 { template struct JsonVariantComparer { static bool equals(const TVariant &variant, const TComparand &comparand) { return variant.template as() == comparand; } }; template struct JsonVariantComparer< TVariant, TString, typename TypeTraits::EnableIf< Internals::StringFuncs::has_equals>::type> { static bool equals(const TVariant &variant, const TString &comparand) { const char *value = variant.template as(); return Internals::StringFuncs::equals(comparand, value); } }; template inline bool operator==(const JsonVariantBase &variant, TComparand comparand) { typedef JsonVariantBase TVariant; return JsonVariantComparer::equals(variant, comparand); } template inline bool operator==(TComparand comparand, const JsonVariantBase &variant) { typedef JsonVariantBase TVariant; return JsonVariantComparer::equals(variant, comparand); } template inline bool operator!=(const JsonVariantBase &variant, TComparand comparand) { typedef JsonVariantBase TVariant; return !JsonVariantComparer::equals(variant, comparand); } template inline bool operator!=(TComparand comparand, const JsonVariantBase &variant) { typedef JsonVariantBase TVariant; return !JsonVariantComparer::equals(variant, comparand); } template inline bool operator<=(const JsonVariantBase &left, TComparand right) { return left.template as() <= right; } template inline bool operator<=(TComparand comparand, const JsonVariantBase &variant) { return comparand <= variant.template as(); } template inline bool operator>=(const JsonVariantBase &variant, TComparand comparand) { return variant.template as() >= comparand; } template inline bool operator>=(TComparand comparand, const JsonVariantBase &variant) { return comparand >= variant.template as(); } template inline bool operator<(const JsonVariantBase &varian, TComparand comparand) { return varian.template as() < comparand; } template inline bool operator<(TComparand comparand, const JsonVariantBase &variant) { return comparand < variant.template as(); } template inline bool operator>(const JsonVariantBase &variant, TComparand comparand) { return variant.template as() > comparand; } template inline bool operator>(TComparand comparand, const JsonVariantBase &variant) { return comparand > variant.template as(); } }