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

NOTE: Decade syntax is slower to execute but more natural. More...

#include <eval.h>

Public Types

using self_type = environment< DECADE_SYNTAX >
 
using eval_func = std::function< value(self_type &, std::vector< value >)>
 

Public Member Functions

self_typeget_root_env () const noexcept
 
auto find_in_user_storage (this auto &&self, 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 constfind_unknown_func_eval () const noexcept
 
eval_func constfind_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_typeparent_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
 
voiduser_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 >

NOTE: Decade syntax is slower to execute but more natural.

Definition at line 95 of file eval.h.

Member Typedef Documentation

◆ eval_func

template<bool DECADE_SYNTAX = false>
using ghassanpl::eval::environment< DECADE_SYNTAX >::eval_func = std::function<value(self_type&, std::vector<value>)>

Definition at line 101 of file eval.h.

◆ self_type

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

Definition at line 97 of file eval.h.

Member Function Documentation

◆ assert_arg()

template<bool DECADE_SYNTAX = false>
static 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 368 of file eval.h.

◆ assert_args() [1/3]

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

Definition at line 350 of file eval.h.

◆ assert_args() [2/3]

template<bool DECADE_SYNTAX = false>
static 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 356 of file eval.h.

◆ assert_args() [3/3]

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

Definition at line 383 of file eval.h.

◆ assert_min_args()

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

Definition at line 362 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 264 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 396 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 409 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 402 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 182 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
inline

Definition at line 155 of file eval.h.

◆ find_in_user_storage()

template<bool DECADE_SYNTAX = false>
auto ghassanpl::eval::environment< DECADE_SYNTAX >::find_in_user_storage ( this auto &&  self,
std::string_view  name 
)
inline

Definition at line 115 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
inlinenoexcept

Definition at line 146 of file eval.h.

◆ get_root_env()

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

Definition at line 113 of file eval.h.

◆ import_lib() [1/2]

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

Definition at line 415 of file eval.h.

◆ import_lib() [2/2]

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

Definition at line 421 of file eval.h.

◆ is_true() [1/2]

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

Definition at line 335 of file eval.h.

◆ is_true() [2/2]

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

Definition at line 345 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 165 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 322 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 131 of file eval.h.

◆ user_var()

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

Definition at line 123 of file eval.h.

Member Data Documentation

◆ decade_syntax

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

Definition at line 98 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 107 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 104 of file eval.h.

◆ parent_env

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

Definition at line 103 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 110 of file eval.h.

◆ sexps_syntax

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

Definition at line 99 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 111 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 105 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 106 of file eval.h.

◆ user_data

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

Definition at line 109 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 108 of file eval.h.