header_utils
Loading...
Searching...
No Matches
ghassanpl::eval::environment< DECADE_SYNTAX > Struct Template Reference

The primary class to store the evaluation environment, declared functions, variables, etc. More...

#include <eval.h>

Public Types

using self_type
using eval_func

Public Member Functions

self_type * get_root_env () const noexcept
auto find_in_user_storage (std::string_view name)
value user_var (std::string_view name)
json & set_user_var (std::string_view name, value val, bool force_local=false)
eval_func const * find_unknown_func_eval () const noexcept
eval_func const * find_func (std::string_view name) const
template<typename... ARGS>
json report_error (std::string_view fmt, ARGS &&... args)
value eval_call (std::vector< value > args)
template<typename V>
value eval (V &&val)
template<typename T>
json safe_eval (T &&value)
bool is_true (json const &val)
bool is_true (value const &val)
value eval_arg (std::vector< value > &args, size_t n, json::value_t type=json::value_t::discarded)
void eval_args (std::vector< value > &args, size_t n)
void eval_args (std::vector< value > &args)
template<typename LIB_TYPE>
void import_lib ()
template<template< bool > typename LIB_TYPE>
void import_lib ()

Static Public Member Functions

static void assert_args (std::span< value const > args, size_t arg_count)
static void assert_args (std::span< value const > args, size_t min_args, size_t max_args)
static void assert_min_args (std::span< value const > args, size_t arg_count)
static auto assert_arg (std::span< value const > args, size_t arg_num, json::value_t type=json::value_t::discarded)
template<std::same_as< nlohmann::json::value_t >... T>
static void assert_args (std::vector< value > args, T... arg_types)

Public Attributes

self_type * parent_env
std::map< std::string, eval_func, std::less<> > funcs
 TODO: How to do const parent envs, or const vars?
eval_func unknown_func_eval
std::function< value(self_type &, std::string_view)> unknown_var_eval
std::function< void(std::string_view)> error_handler
std::map< std::string, json, std::less<> > user_storage
void * user_data
std::map< std::string, eval_func, std::less<> > prefix_macros
std::function< bool(json const &)> truthiness_function
 eval('.test') -> eval(prefix_macros['.']('.test'))

Static Public Attributes

static constexpr bool decade_syntax
static constexpr bool sexps_syntax

Detailed Description

template<bool DECADE_SYNTAX = false>
struct ghassanpl::eval::environment< DECADE_SYNTAX >

The primary class to store the evaluation environment, declared functions, variables, etc.

Definition at line 121 of file eval.h.

Member Typedef Documentation

◆ eval_func

template<bool DECADE_SYNTAX = false>
using ghassanpl::eval::environment< DECADE_SYNTAX >::eval_func

Definition at line 127 of file eval.h.

◆ self_type

template<bool DECADE_SYNTAX = false>
using ghassanpl::eval::environment< DECADE_SYNTAX >::self_type

Definition at line 123 of file eval.h.

Member Function Documentation

◆ assert_arg()

template<bool DECADE_SYNTAX = false>
auto ghassanpl::eval::environment< DECADE_SYNTAX >::assert_arg ( std::span< value const > args,
size_t arg_num,
json::value_t type = json::value_t::discarded )
inlinestatic

Definition at line 401 of file eval.h.

◆ assert_args() [1/3]

template<bool DECADE_SYNTAX = false>
void ghassanpl::eval::environment< DECADE_SYNTAX >::assert_args ( std::span< value const > args,
size_t arg_count )
inlinestatic

Definition at line 383 of file eval.h.

◆ assert_args() [2/3]

template<bool DECADE_SYNTAX = false>
void ghassanpl::eval::environment< DECADE_SYNTAX >::assert_args ( std::span< value const > args,
size_t min_args,
size_t max_args )
inlinestatic

Definition at line 389 of file eval.h.

◆ assert_args() [3/3]

template<bool DECADE_SYNTAX = false>
template<std::same_as< nlohmann::json::value_t >... T>
void ghassanpl::eval::environment< DECADE_SYNTAX >::assert_args ( std::vector< value > args,
T... arg_types )
inlinestatic

Definition at line 416 of file eval.h.

◆ assert_min_args()

template<bool DECADE_SYNTAX = false>
void ghassanpl::eval::environment< DECADE_SYNTAX >::assert_min_args ( std::span< value const > args,
size_t arg_count )
inlinestatic

Definition at line 395 of file eval.h.

◆ eval()

template<bool DECADE_SYNTAX = false>
template<typename V>
value ghassanpl::eval::environment< DECADE_SYNTAX >::eval ( V && val)
inline

Definition at line 297 of file eval.h.

◆ eval_arg()

template<bool DECADE_SYNTAX = false>
value ghassanpl::eval::environment< DECADE_SYNTAX >::eval_arg ( std::vector< value > & args,
size_t n,
json::value_t type = json::value_t::discarded )
inline

Definition at line 429 of file eval.h.

◆ eval_args() [1/2]

template<bool DECADE_SYNTAX = false>
void ghassanpl::eval::environment< DECADE_SYNTAX >::eval_args ( std::vector< value > & args)
inline

Definition at line 442 of file eval.h.

◆ eval_args() [2/2]

template<bool DECADE_SYNTAX = false>
void ghassanpl::eval::environment< DECADE_SYNTAX >::eval_args ( std::vector< value > & args,
size_t n )
inline

Definition at line 435 of file eval.h.

◆ eval_call()

template<bool DECADE_SYNTAX = false>
value ghassanpl::eval::environment< DECADE_SYNTAX >::eval_call ( std::vector< value > args)
inline

Definition at line 215 of file eval.h.

◆ find_func()

template<bool DECADE_SYNTAX = false>
eval_func const * ghassanpl::eval::environment< DECADE_SYNTAX >::find_func ( std::string_view name) const
inlinenodiscard

Definition at line 188 of file eval.h.

◆ find_in_user_storage()

template<bool DECADE_SYNTAX = false>
auto ghassanpl::eval::environment< DECADE_SYNTAX >::find_in_user_storage ( std::string_view name)
inlinenodiscard

Definition at line 141 of file eval.h.

◆ find_unknown_func_eval()

template<bool DECADE_SYNTAX = false>
eval_func const * ghassanpl::eval::environment< DECADE_SYNTAX >::find_unknown_func_eval ( ) const
inlinenodiscardnoexcept

Definition at line 179 of file eval.h.

◆ get_root_env()

template<bool DECADE_SYNTAX = false>
self_type * ghassanpl::eval::environment< DECADE_SYNTAX >::get_root_env ( ) const
inlinenodiscardnoexcept

Definition at line 139 of file eval.h.

◆ import_lib() [1/2]

template<bool DECADE_SYNTAX = false>
template<template< bool > typename LIB_TYPE>
void ghassanpl::eval::environment< DECADE_SYNTAX >::import_lib ( )
inline

Definition at line 454 of file eval.h.

◆ import_lib() [2/2]

template<bool DECADE_SYNTAX = false>
template<typename LIB_TYPE>
void ghassanpl::eval::environment< DECADE_SYNTAX >::import_lib ( )
inline

Definition at line 448 of file eval.h.

◆ is_true() [1/2]

template<bool DECADE_SYNTAX = false>
bool ghassanpl::eval::environment< DECADE_SYNTAX >::is_true ( json const & val)
inlinenodiscard

Definition at line 368 of file eval.h.

◆ is_true() [2/2]

template<bool DECADE_SYNTAX = false>
bool ghassanpl::eval::environment< DECADE_SYNTAX >::is_true ( value const & val)
inlinenodiscard

Definition at line 378 of file eval.h.

◆ report_error()

template<bool DECADE_SYNTAX = false>
template<typename... ARGS>
json ghassanpl::eval::environment< DECADE_SYNTAX >::report_error ( std::string_view fmt,
ARGS &&... args )
inline

Definition at line 198 of file eval.h.

◆ safe_eval()

template<bool DECADE_SYNTAX = false>
template<typename T>
json ghassanpl::eval::environment< DECADE_SYNTAX >::safe_eval ( T && value)
inline

Definition at line 355 of file eval.h.

◆ set_user_var()

template<bool DECADE_SYNTAX = false>
json & ghassanpl::eval::environment< DECADE_SYNTAX >::set_user_var ( std::string_view name,
value val,
bool force_local = false )
inline

Definition at line 164 of file eval.h.

◆ user_var()

template<bool DECADE_SYNTAX = false>
value ghassanpl::eval::environment< DECADE_SYNTAX >::user_var ( std::string_view name)
inlinenodiscard

Definition at line 156 of file eval.h.

Member Data Documentation

◆ decade_syntax

template<bool DECADE_SYNTAX = false>
bool ghassanpl::eval::environment< DECADE_SYNTAX >::decade_syntax
staticconstexpr

Definition at line 124 of file eval.h.

◆ error_handler

template<bool DECADE_SYNTAX = false>
std::function<void(std::string_view)> ghassanpl::eval::environment< DECADE_SYNTAX >::error_handler

Definition at line 133 of file eval.h.

◆ funcs

template<bool DECADE_SYNTAX = false>
std::map<std::string, eval_func, std::less<> > ghassanpl::eval::environment< DECADE_SYNTAX >::funcs

TODO: How to do const parent envs, or const vars?

Definition at line 130 of file eval.h.

◆ parent_env

template<bool DECADE_SYNTAX = false>
self_type* ghassanpl::eval::environment< DECADE_SYNTAX >::parent_env

Definition at line 129 of file eval.h.

◆ prefix_macros

template<bool DECADE_SYNTAX = false>
std::map<std::string, eval_func, std::less<> > ghassanpl::eval::environment< DECADE_SYNTAX >::prefix_macros

Definition at line 136 of file eval.h.

◆ sexps_syntax

template<bool DECADE_SYNTAX = false>
bool ghassanpl::eval::environment< DECADE_SYNTAX >::sexps_syntax
staticconstexpr

Definition at line 125 of file eval.h.

◆ truthiness_function

template<bool DECADE_SYNTAX = false>
std::function<bool(json const&)> ghassanpl::eval::environment< DECADE_SYNTAX >::truthiness_function

eval('.test') -> eval(prefix_macros['.']('.test'))

Definition at line 137 of file eval.h.

◆ unknown_func_eval

template<bool DECADE_SYNTAX = false>
eval_func ghassanpl::eval::environment< DECADE_SYNTAX >::unknown_func_eval

Definition at line 131 of file eval.h.

◆ unknown_var_eval

template<bool DECADE_SYNTAX = false>
std::function<value(self_type&, std::string_view)> ghassanpl::eval::environment< DECADE_SYNTAX >::unknown_var_eval

Definition at line 132 of file eval.h.

◆ user_data

template<bool DECADE_SYNTAX = false>
void* ghassanpl::eval::environment< DECADE_SYNTAX >::user_data

Definition at line 135 of file eval.h.

◆ user_storage

template<bool DECADE_SYNTAX = false>
std::map<std::string, json, std::less<> > ghassanpl::eval::environment< DECADE_SYNTAX >::user_storage

Definition at line 134 of file eval.h.