From cc6891dde80a54aca508892e4a5c0015b57d4a81 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 14 Oct 2024 19:38:30 +0300 Subject: [PATCH] feat: boolean type support finally --- src/data/dv.hpp | 3 +++ src/logic/CommandsInterpreter.cpp | 6 ++++++ src/logic/CommandsInterpreter.hpp | 4 +++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/data/dv.hpp b/src/data/dv.hpp index 94d96453..8070849f 100644 --- a/src/data/dv.hpp +++ b/src/data/dv.hpp @@ -505,6 +505,9 @@ namespace dv { inline bool isNumber() const noexcept { return type == value_type::number; } + inline bool isBoolean() const noexcept { + return type == value_type::boolean; + } }; inline bool is_numeric(const value& val) { diff --git a/src/logic/CommandsInterpreter.cpp b/src/logic/CommandsInterpreter.cpp index d2e5bb03..cc8ff900 100644 --- a/src/logic/CommandsInterpreter.cpp +++ b/src/logic/CommandsInterpreter.cpp @@ -39,6 +39,7 @@ class CommandParser : BasicParser { {"int", ArgType::integer}, {"str", ArgType::string}, {"sel", ArgType::selector}, + {"bool", ArgType::boolean}, {"enum", ArgType::enumvalue}, }; public: @@ -250,6 +251,11 @@ public: return selectorCheck(arg, value); case ArgType::integer: return typeCheck(arg, dv::value_type::integer, value, "integer"); + case ArgType::boolean: + if (!arg->optional) { + throw typeError(arg->name, "boolean", value); + } + return value.isBoolean(); case ArgType::string: if (!value.isString()) { return !arg->optional; diff --git a/src/logic/CommandsInterpreter.hpp b/src/logic/CommandsInterpreter.hpp index af3e54ac..ce9ccaba 100644 --- a/src/logic/CommandsInterpreter.hpp +++ b/src/logic/CommandsInterpreter.hpp @@ -8,7 +8,7 @@ #include "data/dv.hpp" namespace cmd { - enum class ArgType { number, integer, enumvalue, selector, string }; + enum class ArgType { number, integer, enumvalue, selector, boolean, string }; inline std::string argtype_name(ArgType type) { switch (type) { @@ -20,6 +20,8 @@ namespace cmd { return "enumeration"; case ArgType::selector: return "selector"; + case ArgType::boolean: + return "boolean"; case ArgType::string: return "string"; default: