82 bool has_key(
const std::string& key)
const
101 template<
typename T,
typename K>
104 std::map<variant, variant> tmp;
105 for(
const auto&
p : input_map) {
109 return variant(std::move(tmp));
115 std::map<variant, variant> tmp;
116 for(
const auto& elem : input_set) {
120 return variant(std::move(tmp));
126 std::vector<variant> tmp;
127 for(
const auto& elem : input_vector) {
128 tmp.emplace_back(elem);
131 return variant(std::move(tmp));
136 inputs.emplace_back(key, access_type);
141 PLAIN_LOG <<
"ERROR: cannot set key '" << key <<
"' on object";
146 if(type_ < callable->
type_) {
154 return this < callable ? -1 : (
this == callable ? 0 : 1);
159 throw type_error(
"Tried to serialize type which cannot be serialized");
257 values_[key] = std::move(value);
311 template<
typename T,
typename... Args>
314 return variant{std::make_shared<T>(std::forward<Args>(args)...)};
317 #ifdef __cpp_concepts
319 requires std::is_pointer_v<T>
323 auto callable_cast(
const variant& v) -> std::enable_if_t<std::is_pointer_v<T>, std::shared_ptr<const std::remove_pointer_t<T>>>
326 return std::dynamic_pointer_cast<const std::remove_pointer_t<T>>(v.as_callable());
329 #ifdef __cpp_concepts
331 requires std::is_reference_v<T>
335 auto callable_cast(
const variant& v) -> std::enable_if_t<std::is_reference_v<T>,
const std::remove_reference_t<T>>
338 auto ptr = callable_cast<std::remove_reference_t<T>*>(v);
340 throw type_error{
"could not convert type"};
virtual variant execute_self(variant ctxt)=0
variant get_member(const std::string &name) const
bool is_null() const
Functions to test the type of the internal value.
Standard logging facilities (interface).
std::vector< formula_input > formula_input_vector
std::shared_ptr< map_formula_callable > map_formula_callable_ptr
std::shared_ptr< const formula_callable > const_formula_callable_ptr
variant make_callable(Args &&... args)
std::shared_ptr< formula_callable > formula_callable_ptr
auto callable_cast(const variant &v) -> std::enable_if_t< std::is_pointer_v< T >, std::shared_ptr< const std::remove_pointer_t< T >>>
std::shared_ptr< const map_formula_callable > const_map_formula_callable_ptr