ELC in dev
ELC-lang
载入中...
搜索中...
未找到
elc::defs::core 命名空间参考

命名空间

namespace  core_runtime_internal_helper_n
 

struct  base_binary_function_node
 
struct  base_constexpr_t
 
struct  base_runtime_exception
 
struct  binary_node_base_t
 
struct  binary_node_t
 
struct  code_list
 
struct  common_node
 
struct  cons
 
struct  expr
 
struct  nil_t
 
struct  node_like
 
struct  t_t
 
struct  value
 
struct  void_t
 

类型定义

typedef comn_ptr_t< node_likeptr
 
typedef weak_ptr_t< node_likeweak_ptr
 
typedef comn_ptr_t< const node_likeconst_ptr
 
typedef weak_ptr_t< const node_likeconst_weak_ptr
 

函数

template<typename T >
ptr make_long_term_binary_node_from (T a) noexcept
 
template<typename T >
constexpr bool as_ptr_nothrow_helper () noexcept
 
template<typename T >
decltype(autoas_ptr (T &&a) noexcept(as_ptr_nothrow_helper< T >())
 
template<typename T >
constexpr bool as_value_nothrow_helper () noexcept
 
template<typename T >
decltype(autoas_value (T &&a) noexcept(as_value_nothrow_helper< T >())
 
ptr make_list () noexcept
 
template<typename T , typename... Args>
ptr make_list (T &&first, Args &&...rest)
 
constexpr node_likethe_get_null_ptr (const node_like *) noexcept
 
logical_bool the_pointer_to_bool (const node_like *a) noexcept
 
logical_bool the_pointer_equal (const node_like *a, const node_like *b) noexcept
 
hash_t the_pointer_hash (const node_like *a) noexcept
 
void the_waiting_for_destroy (node_like *a) noexcept
 
void the_destroy_and_free (node_like *a) noexcept
 
void the_destroy (node_like *a) noexcept
 
static value::base_data_tthe_get_null_ptr (const value::base_data_t *) noexcept
 
value car_of (ptr p)
 
value cdr_of (ptr p)
 
value car_of (auto &&node)
 
value cdr_of (auto &&node)
 
template<typename T >
bool was_an (const_ptr p) noexcept
 
template<typename T >
maybe_fail_reference< T > maybe_fail_use_by_ref_as (ptr p) noexcept
 
template<typename T >
T & use_by_ref_as (ptr p) noexcept
 
template<typename T >
const T & const_use_by_ref_as (const_ptr p) noexcept
 
template<typename T >
use_as (const_ptr p) noexcept
 
template<typename T >
const T & use_by_ref_as (const_ptr p) noexcept
 
template<typename T >
const T & use_by_ref_as (auto &&a) noexcept
 
template<typename T >
ptr make_binary_node_from (T a) noexcept
 
value eval (ptr p)
 
value eval (auto &&node)
 

变量

elc::defs::core::void_t the_void
 
elc::defs::core::nil_t nil
 
elc::defs::core::t_t t
 
template<typename T >
map_t< ptr, T > long_term_binary_node_storager {}
 
template<>
map_t< ptr, string > long_term_binary_node_storager< string > {}
 

类型定义说明

◆ const_ptr

在文件 all_defs.cpp32207 行定义.

◆ const_weak_ptr

在文件 all_defs.cpp32208 行定义.

◆ ptr

在文件 all_defs.cpp32205 行定义.

◆ weak_ptr

在文件 all_defs.cpp32206 行定义.

函数说明

◆ as_ptr()

template<typename T >
decltype(auto) elc::defs::core::as_ptr ( T &&  a)
noexcept

在文件 all_defs.cpp32259 行定义.

32259 {
32260 ELC_TEST_EVENTNAME("as_ptr转换");
32261 if constexpr(was_not_an_ill_form(ptr(&a)))
32262 return ptr(&a);
32263 elseif constexpr(was_not_an_ill_form(const_ptr(&a)))
32264 return const_ptr(&a);
32265 elseif constexpr(was_not_an_ill_form(static_cast<node_like&>(a)))
32266 return &static_cast<node_like&>(a);
32267 elseif constexpr(was_not_an_ill_form(static_cast<const node_like&>(a)))
32268 return &static_cast<const node_like&>(a);
32269 elseif constexpr(was_not_an_ill_form(static_cast<value&>(a)))
32270 return ptr(static_cast<value&>(a));
32271 elseif constexpr(was_not_an_ill_form(static_cast<const value&>(a)))
32272 return const_ptr(static_cast<value&>(a));
32273 elseif constexpr(was_not_an_ill_form(ptr(a)))
32274 return ptr(a);
32275 elseif constexpr(was_not_an_ill_form(const_ptr(a)))
32276 return const_ptr(a);
32277 elseif constexpr(type_info<remove_cvref<T>> == type_info<char_t>)
32278 return make_long_term_binary_node_from<char_t>(a);
32279 elseif constexpr(basic_integer_type<remove_cvref<T>>){
32280 if constexpr(signed_type<remove_cvref<T>>)
32281 return make_long_term_binary_node_from<int_t>(a);
32282 else
32283 return make_long_term_binary_node_from<uint_t>(a);
32284 }
32285 elseif constexpr(basic_float_type<remove_cvref<T>>)
32286 return make_long_term_binary_node_from<float_t>(a);
32287 elseif constexpr(construct<string>.able<T>){
32288 return make_long_term_binary_node_from<string>(a);
32289 }
32290}
#define was_not_an_ill_form(...)
Definition all_defs.cpp:611
#define elseif
Definition all_defs.cpp:650
#define ELC_TEST_EVENTNAME(name)
Definition all_defs.cpp:686
comn_ptr_t< const node_like > const_ptr
comn_ptr_t< node_like > ptr
函数调用图:
这是这个函数的调用关系图:

◆ as_ptr_nothrow_helper()

template<typename T >
constexpr bool elc::defs::core::as_ptr_nothrow_helper ( )
constexprnoexcept

在文件 all_defs.cpp32227 行定义.

32227 {
32228 if constexpr(was_not_an_ill_form(ptr(&declvalue(T))))
32229 return noexcept(ptr(&declvalue(T)));
32231 return noexcept(const_ptr(&declvalue(T)));
32232 elseif constexpr(was_not_an_ill_form(static_cast<node_like&>(declvalue(T))))
32233 return noexcept(&static_cast<node_like&>(declvalue(T)));
32234 elseif constexpr(was_not_an_ill_form(static_cast<const node_like&>(declvalue(T))))
32235 return noexcept(&static_cast<const node_like&>(declvalue(T)));
32236 elseif constexpr(was_not_an_ill_form(static_cast<value&>(declvalue(T))))
32237 return noexcept(ptr(static_cast<value&>(declvalue(T))));
32238 elseif constexpr(was_not_an_ill_form(static_cast<const value&>(declvalue(T))))
32239 return noexcept(const_ptr(static_cast<value&>(declvalue(T))));
32240 elseif constexpr(was_not_an_ill_form(ptr(declvalue(T))))
32241 return noexcept(ptr(declvalue(T)));
32243 return noexcept(const_ptr(declvalue(T)));
32244 elseif constexpr(type_info<remove_cvref<T>> == type_info<char_t>)
32245 return noexcept(make_long_term_binary_node_from<char_t>(declvalue(T)));
32246 elseif constexpr(basic_integer_type<remove_cvref<T>>){
32247 if constexpr(signed_type<remove_cvref<T>>)
32248 return noexcept(make_long_term_binary_node_from<int_t>(declvalue(T)));
32249 else
32250 return noexcept(make_long_term_binary_node_from<uint_t>(declvalue(T)));
32251 }
32252 elseif constexpr(basic_float_type<remove_cvref<T>>)
32253 return noexcept(make_long_term_binary_node_from<float_t>(declvalue(T)));
32254 elseif constexpr(construct<string>.able<T>){
32255 return noexcept(make_long_term_binary_node_from<string>(declvalue(T)));
32256 }
32257}
#define declvalue(...)
Definition all_defs.cpp:556

◆ as_value()

template<typename T >
decltype(auto) elc::defs::core::as_value ( T &&  a)
noexcept

在文件 all_defs.cpp32306 行定义.

32306 {
32307 ELC_TEST_EVENTNAME("as_value转换");
32308 if constexpr(was_not_an_ill_form(static_cast<value&>(a)))
32309 return static_cast<value&>(a);
32310 elseif constexpr(was_not_an_ill_form(static_cast<const value&>(a)))
32311 return static_cast<const value&>(a);
32313 if constexpr(type_info<decltype(as_ptr(declvalue(T)))> == type_info<ptr>)
32314 return value(as_ptr(forward<T>(a)));
32315 elseif constexpr(type_info<decltype(as_ptr(declvalue(T)))> == type_info<const_ptr>)
32316 return (const value)remove_const((const node_like*)as_ptr(forward<T>(a)));
32317 }
32318}
constexpr type_info_t< T > type_info
constexpr T & remove_const(const T &a) noexcept
对引用移除const
decltype(auto) as_ptr(T &&a) noexcept(as_ptr_nothrow_helper< T >())
函数调用图:
这是这个函数的调用关系图:

◆ as_value_nothrow_helper()

template<typename T >
constexpr bool elc::defs::core::as_value_nothrow_helper ( )
constexprnoexcept

在文件 all_defs.cpp32293 行定义.

32293 {
32294 if constexpr(was_not_an_ill_form(static_cast<value&>(declvalue(T))))
32295 return noexcept(static_cast<value&>(declvalue(T)));
32296 elseif constexpr(was_not_an_ill_form(static_cast<const value&>(declvalue(T))))
32297 return noexcept(static_cast<const value&>(declvalue(T)));
32299 if constexpr(type_info<decltype(as_ptr(declvalue(T)))> == type_info<ptr>)
32300 return noexcept(value(as_ptr(declvalue(T))));
32301 elseif constexpr(type_info<decltype(as_ptr(declvalue(T)))> == type_info<const_ptr>)
32302 return noexcept((const value)remove_const((const node_like*)as_ptr(declvalue(T))));
32303 }
32304}
函数调用图:
这是这个函数的调用关系图:

◆ car_of() [1/2]

value elc::defs::core::car_of ( auto &&  node)
inline

在文件 all_defs.cpp33214 行定义.

33214 {
33215 return car_of(as_ptr(node));
33216}
value car_of(ptr p)
函数调用图:

◆ car_of() [2/2]

value elc::defs::core::car_of ( ptr  p)
inline

在文件 all_defs.cpp33208 行定义.

33208 {
33209 return (*p)[t];
33210}
elc::defs::core::t_t t
函数调用图:
这是这个函数的调用关系图:

◆ cdr_of() [1/2]

value elc::defs::core::cdr_of ( auto &&  node)
inline

在文件 all_defs.cpp33217 行定义.

33217 {
33218 return cdr_of(as_ptr(node));
33219}
value cdr_of(ptr p)
函数调用图:

◆ cdr_of() [2/2]

value elc::defs::core::cdr_of ( ptr  p)
inline

在文件 all_defs.cpp33211 行定义.

33211 {
33212 return (*p)[nil];
33213}
elc::defs::core::nil_t nil
函数调用图:
这是这个函数的调用关系图:

◆ const_use_by_ref_as()

template<typename T >
const T & elc::defs::core::const_use_by_ref_as ( const_ptr  p)
inlinenoexcept

在文件 all_defs.cpp33545 行定义.

33545 {
33546 typedef binary_node_t<T> target_node_t;
33547 if(p->get_type_info() == type_info<binary_node_base_t>){
33548 auto base_p = down_cast<const binary_node_base_t*>(p.get());
33549 if(base_p->get_additional_type_info() == type_info<target_node_t>)
33550 return down_cast<const target_node_t*>(base_p)->_m;
33551 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
33552 try{
33553 base_p->throw_self_ptr();
33554 }
33555 catch(const T*aret){
33556 return*aret;
33557 }
33558 catch(const void*){}
33559 }
33560 }
33561 return const_default_value_of<T>;
33562}

◆ eval() [1/2]

value elc::defs::core::eval ( auto &&  node)
inline

在文件 all_defs.cpp33626 行定义.

33626 {
33627 return eval(as_ptr(node));
33628}
value eval(ptr p)
函数调用图:

◆ eval() [2/2]

value elc::defs::core::eval ( ptr  p)
inline

在文件 all_defs.cpp33623 行定义.

33623 {
33624 return p->be_eval();
33625}
函数调用图:
这是这个函数的调用关系图:

◆ make_binary_node_from()

template<typename T >
ptr elc::defs::core::make_binary_node_from ( a)
inlinenoexcept

在文件 all_defs.cpp33576 行定义.

33576 {
33577 return get<binary_node_t<T>>(move(a));
33578}
函数调用图:
这是这个函数的调用关系图:

◆ make_list() [1/2]

ptr elc::defs::core::make_list ( )
inlinenoexcept

在文件 all_defs.cpp33259 行定义.

33259{return &nil;}
函数调用图:
这是这个函数的调用关系图:

◆ make_list() [2/2]

template<typename T , typename... Args>
ptr elc::defs::core::make_list ( T &&  first,
Args &&...  rest 
)
inline

在文件 all_defs.cpp33261 行定义.

33261 {
33262 ELC_TEST_EVENTNAME("make_list调用");
33263 return get<cons>(as_ptr(first),make_list(forward<Args>(rest)...));
33264}
ptr make_list() noexcept
函数调用图:

◆ make_long_term_binary_node_from()

template<typename T >
ptr elc::defs::core::make_long_term_binary_node_from ( a)
inlinenoexcept

在文件 all_defs.cpp33582 行定义.

33582 {
33583 ptr& to = long_term_binary_node_storager<T>[a];
33584 if(!bool(to) || const_use_by_ref_as<T>(to)!=a)
33585 to = make_binary_node_from<T>(move(a));
33586 return to;
33587}
函数调用图:
这是这个函数的调用关系图:

◆ maybe_fail_use_by_ref_as()

template<typename T >
maybe_fail_reference< T > elc::defs::core::maybe_fail_use_by_ref_as ( ptr  p)
inlinenoexcept

在文件 all_defs.cpp33522 行定义.

33522 {
33523 typedef binary_node_t<T> target_node_t;
33524 if(p->get_type_info() == type_info<binary_node_base_t>){
33525 auto base_p = down_cast<binary_node_base_t*>(p.get());
33526 if(base_p->get_additional_type_info() == type_info<target_node_t>)
33527 return down_cast<target_node_t*>(base_p)->_m;
33528 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
33529 try{
33530 base_p->throw_self_ptr();
33531 }
33532 catch(T*aret){
33533 return*aret;
33534 }
33535 catch(void*){}
33536 }
33537 }
33538 return note::fail;
33539}

◆ the_destroy()

void elc::defs::core::the_destroy ( node_like a)
inlinenoexcept

在文件 all_defs.cpp32453 行定义.

32453 {
32454 a->destroy();
32455}
函数调用图:

◆ the_destroy_and_free()

void elc::defs::core::the_destroy_and_free ( node_like a)
inlinenoexcept

在文件 all_defs.cpp32448 行定义.

32448 {
32449 unget(a);
32450}

◆ the_get_null_ptr() [1/2]

constexpr node_like * elc::defs::core::the_get_null_ptr ( const node_like )
inlineconstexprnoexcept

在文件 all_defs.cpp32995 行定义.

32995{return addressof((node_like&)the_void);}
void the_void

◆ the_get_null_ptr() [2/2]

static value::base_data_t * elc::defs::core::the_get_null_ptr ( const value::base_data_t )
staticnoexcept

在文件 all_defs.cpp32673 行定义.

32673 {
32674 return&value::null_data;
32675}

◆ the_pointer_equal()

logical_bool elc::defs::core::the_pointer_equal ( const node_like a,
const node_like b 
)
inlinenoexcept

在文件 all_defs.cpp32438 行定义.

32438 {
32439 return a->eq_with(b);
32440}
logical_bool eq_with(const_ptr a) const noexcept
函数调用图:

◆ the_pointer_hash()

hash_t elc::defs::core::the_pointer_hash ( const node_like a)
inlinenoexcept

在文件 all_defs.cpp32441 行定义.

32441 {
32442 return a->operator hash_t();
32443}

◆ the_pointer_to_bool()

logical_bool elc::defs::core::the_pointer_to_bool ( const node_like a)
inlinenoexcept

在文件 all_defs.cpp32435 行定义.

32435 {
32436 return a->operator logical_bool();
32437}
函数调用图:

◆ the_waiting_for_destroy()

void elc::defs::core::the_waiting_for_destroy ( node_like a)
inlinenoexcept

在文件 all_defs.cpp32445 行定义.

32445 {
32447}
virtual void waiting_for_destroy() noexcept

◆ use_as()

template<typename T >
T elc::defs::core::use_as ( const_ptr  p)
inlinenoexcept

在文件 all_defs.cpp33564 行定义.

33564 {
33565 return const_use_by_ref_as<T>(p);
33566}
函数调用图:
这是这个函数的调用关系图:

◆ use_by_ref_as() [1/3]

template<typename T >
const T & elc::defs::core::use_by_ref_as ( auto &&  a)
inlinenoexcept

在文件 all_defs.cpp33572 行定义.

33572 {
33573 return use_by_ref_as<T>(as_ptr(a));
33574}
函数调用图:

◆ use_by_ref_as() [2/3]

template<typename T >
const T & elc::defs::core::use_by_ref_as ( const_ptr  p)
inlinenoexcept

在文件 all_defs.cpp33568 行定义.

33568 {
33569 return const_use_by_ref_as<T>(p);
33570}
函数调用图:

◆ use_by_ref_as() [3/3]

template<typename T >
T & elc::defs::core::use_by_ref_as ( ptr  p)
inlinenoexcept

在文件 all_defs.cpp33541 行定义.

33541 {
33542 return maybe_fail_use_by_ref_as<T>(p).get_ref();
33543}
函数调用图:
这是这个函数的调用关系图:

◆ was_an()

template<typename T >
bool elc::defs::core::was_an ( const_ptr  p)
inlinenoexcept

在文件 all_defs.cpp33503 行定义.

33503 {
33504 typedef binary_node_t<T> target_node_t;
33505 if(p->get_type_info() == type_info<binary_node_base_t>){
33506 auto base_p = down_cast<const binary_node_base_t*>(p.get());
33507 if(base_p->get_additional_type_info() == type_info<target_node_t>)
33508 return true;
33509 elseif constexpr(::std::is_class_v<T> && !::std::is_final_v<T>){
33510 try{
33511 base_p->throw_self_ptr();
33512 }
33513 catch(const T*){
33514 return true;
33515 }
33516 catch(const void*){}
33517 }
33518 }
33519 return false;
33520}
函数调用图:
这是这个函数的调用关系图:

变量说明

◆ long_term_binary_node_storager

template<typename T >
map_t<ptr,T> elc::defs::core::long_term_binary_node_storager {}
inline

在文件 all_defs.cpp33580 行定义.

33580{};

◆ long_term_binary_node_storager< string >

template<>
map_t<ptr,string> elc::defs::core::long_term_binary_node_storager< string > {}
inline

在文件 all_defs.cpp52946 行定义.

53972{};

◆ nil

elc::defs::core::nil_t elc::defs::core::nil

◆ t

elc::defs::core::t_t elc::defs::core::t

◆ the_void

elc::defs::core::void_t elc::defs::core::the_void