1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include "type.h"
- #include "ascii.h"
- #include <array>
- bool IsSpace(const char* s, size_t len) noexcept {
- if (len == 0) {
- return false;
- }
- for (const char* p = s; p < s + len; ++p) {
- if (!IsAsciiSpace(*p)) {
- return false;
- }
- }
- return true;
- }
- template <typename TStringType>
- static bool IsNumberT(const TStringType& s) noexcept {
- if (s.empty()) {
- return false;
- }
- return std::all_of(s.begin(), s.end(), IsAsciiDigit<typename TStringType::value_type>);
- }
- bool IsNumber(const TStringBuf s) noexcept {
- return IsNumberT(s);
- }
- bool IsNumber(const TWtringBuf s) noexcept {
- return IsNumberT(s);
- }
- template <typename TStringType>
- static bool IsHexNumberT(const TStringType& s) noexcept {
- if (s.empty()) {
- return false;
- }
- return std::all_of(s.begin(), s.end(), IsAsciiHex<typename TStringType::value_type>);
- }
- bool IsHexNumber(const TStringBuf s) noexcept {
- return IsHexNumberT(s);
- }
- bool IsHexNumber(const TWtringBuf s) noexcept {
- return IsHexNumberT(s);
- }
- namespace {
- template <size_t N>
- bool IsCaseInsensitiveAnyOf(TStringBuf str, const std::array<TStringBuf, N>& options) {
- for (auto option : options) {
- if (str.size() == option.size() && ::strnicmp(str.data(), option.data(), str.size()) == 0) {
- return true;
- }
- }
- return false;
- }
- } // anonymous namespace
- bool IsTrue(const TStringBuf v) noexcept {
- static constexpr std::array<TStringBuf, 7> trueOptions{
- "true",
- "t",
- "yes",
- "y",
- "on",
- "1",
- "da"};
- return IsCaseInsensitiveAnyOf(v, trueOptions);
- }
- bool IsFalse(const TStringBuf v) noexcept {
- static constexpr std::array<TStringBuf, 7> falseOptions{
- "false",
- "f",
- "no",
- "n",
- "off",
- "0",
- "net"};
- return IsCaseInsensitiveAnyOf(v, falseOptions);
- }
|