YSTest: NPL::Environment类 参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

Public 类型 | Public 成员函数 | 静态 Public 成员函数 | Public 属性 | Private 成员函数 | Private 属性 | 友元 | 相关函数 | 所有成员列表
NPL::Environment类 参考

环境。 更多...

`#include <NPLA.h>`

类 NPL::Environment 继承关系图:
[图例]
NPL::Environment 的协作图:
[图例]

## Public 类型

using | BindingMap = YSLib::map< string, TermNode, ystdex::less<> >
using | NameResolution = pair< observer_ptr< BindingMap::mapped_type >, shared_ptr< Environment > >
| 名称解析结果。 更多...
using | allocator_type = BindingMap::allocator_type
| 分配器类型。 更多...

## Public 成员函数

| Environment (allocator_type a)
| 构造：使用指定的绑定映射分配器初始化空环境。 更多...
| Environment (pmr::memory_resource &rsrc)
| 构造：使用指定的存储资源构造的绑定映射分配器初始化空环境。 更多...
| Environment (const BindingMap &m)
| 构造：使用包含绑定节点的指针。 更多...
| Environment (BindingMap &&m)
| Environment (const ValueObject &vo, allocator_type a)
| 构造：使用父环境。 更多...
| Environment (ValueObject &&vo, allocator_type a)
| Environment (pmr::memory_resource &rsrc, const ValueObject &vo)
| Environment (pmr::memory_resource &rsrc, ValueObject &&vo)
| Environment (const Environment &e)
| DefDeMoveCtor (Environment) PDefHOp(Environment &
const Environment &e | ImplRet (ystdex::copy_and_swap(*this, e)) ~Environment()
| 析构。 更多...
| DefDeMoveAssignment (Environment) template< typename _tKey > TermNode &operator[](_tKey &&k)
YB_ATTR_nodiscard YB_PURE friend | PDefHOp (bool,==, const Environment &x, const Environment &y) ynothrow ImplRet(ystdex
| 判断锚对象未被外部引用。 更多...
template<typename _tKey , typename... _tParams>
bool | AddValue (BindingMap::const_iterator hint, _tKey &&k, _tParams &&... args)
template<typename _tKey , class _tNode >
TermNode & | Bind (_tKey &&k, _tNode &&tm)
| 添加或覆盖绑定。 更多...
void | Define (string_view, ValueObject &&)
| 以字符串为标识符在指定上下文中添加或覆盖定义。 更多...
void | DefineChecked (string_view, ValueObject &&)
| 以字符串为标识符在指定上下文中定义值。 更多...
YB_ATTR_nodiscard YB_PURE NameResolution::first_type | LookupName (string_view) const
| 查找名称。 更多...
bool | Replace (string_view, ValueObject &&)
| 以字符串为标识符在指定上下文的名称查找结果中替换定义。 更多...
void | ReplaceChecked (string_view, ValueObject &&)
| 以字符串为标识符在指定上下文的名称查找结果中替换已存在的定义。 更多...
friend | PDefH (void, swap, Environment &x, Environment &y) ynothrow ImplExpr(swap(x.Bindings

## 静态 Public 成员函数

static void | CheckParent (const ValueObject &)
| 检查可作为父环境的宿主对象。 更多...
static bool | Deduplicate (BindingMap &, const BindingMap &)
| 移除第一参数中名称和第二参数中重复的绑定项。 更多...
static Environment & | EnsureValid (const shared_ptr< Environment > &)
| 确保环境指针有效。 更多...
static YB_NORETURN void | ThrowForInvalidType (const ystdex::type_info &)
| 对不符合环境要求的类型抛出异常。 更多...
static YB_NORETURN void | ThrowForInvalidValue (bool={})
| 抛出无效环境值异常。 更多...

## Public 属性

BindingMap | Bindings
ValueObject | Parent {}
| 父环境：被解释的重定向目标。 更多...
bool | Frozen = {}
| 冻结状态。 更多...
PDefH(TermTags, MakeTermTags, const TermNode &term) const ImplRet(Frozen ? term.Tags|TermTags void | RemoveChecked (string_view)
| 根据当前状态创建指定项的引用。 更多...

## Private 成员函数

YB_ATTR_nodiscard YB_PURE AnchorPtr | InitAnchor () const
| 初始化锚对象指针。 更多...

## Private 属性

AnchorPtr | p_anchor {InitAnchor()}
| 锚对象指针：提供被引用计数。 更多...

## 友元

y | Bindings
y | swap (x.Parent, y.Parent)

## 相关函数

(请注意: 这些不是成员函数.)
template<typename... _tParams>
shared_ptr< Environment > | AllocateEnvironment (const Environment::allocator_type &a, _tParams &&... args)
| 分配环境。 更多...

## 详细描述

环境。

警告
  避免 shared_ptr 析构方式不兼容的初始化。

自从
  build 787

在文件 NPLA.h 第 2003 行定义.

## 成员类型定义说明

## ◆ allocator_type

using NPL::Environment::allocator_type = BindingMap::allocator_type

分配器类型。

注解
  支持 uses-allocator 构造。

自从
  build 847

在文件 NPLA.h 第 2022 行定义.

## ◆ BindingMap

using NPL::Environment::BindingMap = YSLib::map<string, TermNode, ystdex::less<> >

自从
  build 788

在文件 NPLA.h 第 2008 行定义.

## ◆ NameResolution

using NPL::Environment::NameResolution = pair<observer_ptr<BindingMap::mapped_type>, shared_ptr<Environment> >

名称解析结果。

自从
  build 821

名称解析的返回结果是环境中的绑定目标的对象指针和直接保存绑定目标的环境的引用。

在文件 NPLA.h 第 2015 行定义.

## 构造及析构函数说明

## ◆ Environment() [1/9]

NPL::Environment::Environment | ( | allocator_type | a | ) |

inline

构造：使用指定的绑定映射分配器初始化空环境。

自从
  build 845

在文件 NPLA.h 第 2050 行定义.

## ◆ Environment() [2/9]

NPL::Environment::Environment | ( | pmr::memory_resource & | rsrc | ) |

inline

构造：使用指定的存储资源构造的绑定映射分配器初始化空环境。

在文件 NPLA.h 第 2054 行定义.

## ◆ Environment() [3/9]

NPL::Environment::Environment | ( | const BindingMap & | m | ) |

inlineexplicit

构造：使用包含绑定节点的指针。

注解
  不检查绑定的名称。

自从
  build 845

在文件 NPLA.h 第 2065 行定义.

## ◆ Environment() [4/9]

NPL::Environment::Environment | ( | BindingMap && | m | ) |

inlineexplicit

在文件 NPLA.h 第 2069 行定义.

## ◆ Environment() [5/9]

NPL::Environment::Environment | ( | const ValueObject & | vo,
|  | allocator_type | a
| ) |  |

inline

构造：使用父环境。

异常

  NPLException | 异常中立：由 CheckParent 抛出。

自从
  build 845

待办事项:
  使用专用的异常类型。

自从
  build 847

在文件 NPLA.h 第 2082 行定义.

## ◆ Environment() [6/9]

NPL::Environment::Environment | ( | ValueObject && | vo,
|  | allocator_type | a
| ) |  |

inline

在文件 NPLA.h 第 2085 行定义.

## ◆ Environment() [7/9]

NPL::Environment::Environment | ( | pmr::memory_resource & | rsrc,
|  | const ValueObject & | vo
| ) |  |

inline

在文件 NPLA.h 第 2089 行定义.

## ◆ Environment() [8/9]

NPL::Environment::Environment | ( | pmr::memory_resource & | rsrc,
|  | ValueObject && | vo
| ) |  |

inline

在文件 NPLA.h 第 2092 行定义.

## ◆ Environment() [9/9]

NPL::Environment::Environment | ( | const Environment & | e | ) |

inline

自从
  build 847

在文件 NPLA.h 第 2098 行定义.

## 成员函数说明

## ◆ AddValue()

template<typename _tKey , typename... _tParams>

bool NPL::Environment::AddValue | ( | BindingMap::const_iterator | hint,
|  | _tKey && | k,
|  | _tParams &&... | args
| ) |  |

inline

在文件 NPLA.h 第 2169 行定义.

引用了 CHRLib::args, YSLib::NoContainer, ystdex::try_emplace_hint() , 以及 yforward.

被这些函数引用 DefineChecked().

函数调用图:
这是这个函数的调用关系图:

## ◆ Bind()

template<typename _tKey , class _tNode >

TermNode& NPL::Environment::Bind | ( | _tKey && | k,
|  | _tNode && | tm
| ) |  |

inline

添加或覆盖绑定。

自从
  build 857

在文件 NPLA.h 第 2182 行定义.

引用了 platform::Deref(), ystdex::insert_or_assign(), NPL::tm , 以及 yforward.

函数调用图:

## ◆ CheckParent()

static void NPL::Environment::CheckParent | ( | const ValueObject & |  | ) |

static

检查可作为父环境的宿主对象。

注解
  若存在父环境，首先对父环境递归检查。

异常

  NPLException | 异常中立：由 ThrowForInvalidType 抛出。

自从
  build 798

待办事项:
  使用专用的异常类型。

被这些函数引用 NPL::ImplDeDtor().

这是这个函数的调用关系图:

## ◆ Deduplicate()

bool NPL::Environment::Deduplicate | ( | BindingMap & | dst,
|  | const BindingMap & | src
| ) |  |

static

移除第一参数中名称和第二参数中重复的绑定项。

返回
  移除后的目的结果中没有绑定。

自从
  build 825

在文件 NPLA.cpp 第 927 行定义.

引用了 NPL::dst , 以及 YSLib::Drawing::src.

## ◆ DefDeMoveAssignment()

NPL::Environment::DefDeMoveAssignment | ( | Environment |  | ) | &&

inline

自从
  build 852

在文件 NPLA.h 第 2113 行定义.

引用了 platform::Deref(), YSLib::NoContainer, ystdex::try_emplace() , 以及 yforward.

函数调用图:

## ◆ DefDeMoveCtor()

NPL::Environment::DefDeMoveCtor | ( | Environment |  | ) | &

自从
  build 896

## ◆ Define()

void NPL::Environment::Define | ( | string_view | id,
|  | ValueObject && | vo
| ) |  |

以字符串为标识符在指定上下文中添加或覆盖定义。

前置条件
  断言：第一参数的数据指针非空。

自从
  build 867

注解
  不检查标识符合法性。
  若定义已存在，覆盖这个定义。覆盖相同的定义无作用。

在文件 NPLA.cpp 第 939 行定义.

引用了 ystdex::cpp2017::data(), swap, YSLib::vo , 以及 YAssertNonnull.

函数调用图:

## ◆ DefineChecked()

void NPL::Environment::DefineChecked | ( | string_view | id,
|  | ValueObject && | vo
| ) |  |

以字符串为标识符在指定上下文中定义值。

异常

  BadIdentifier | 定义已存在。

在文件 NPLA.cpp 第 947 行定义.

引用了 AddValue(), ystdex::cpp2017::data(), YSLib::vo , 以及 YAssertNonnull.

函数调用图:

## ◆ EnsureValid()

Environment & NPL::Environment::EnsureValid | ( | const shared_ptr< Environment > & | p_env | ) |

static

确保环境指针有效。

异常

  std::invalid_argument | 异常中立：由 ThrowForInvalidType 抛出。

参见
  ThrowForInvalidType

自从
  build 872

在文件 NPLA.cpp 第 955 行定义.

引用了 ThrowForInvalidValue().

函数调用图:

## ◆ ImplRet()

const Environment& e NPL::Environment::ImplRet | ( | ystdex::copy_and_swap *, | e | ) |

析构。

注解
  可检查锚对象中的引用计数。

自从
  build 856

## ◆ InitAnchor()

AnchorPtr NPL::Environment::InitAnchor | ( |  | ) | const

private

初始化锚对象指针。

自从
  build 869

在文件 NPLA.cpp 第 963 行定义.

引用了 Bindings , 以及 ystdex::map< _tKey, _tMapped, _fComp, _tAlloc >::get_allocator().

函数调用图:

## ◆ LookupName()

Environment::NameResolution::first_type NPL::Environment::LookupName | ( | string_view | id | ) | const

查找名称。

返回
  查找到的名称，或查找失败时的空值。

自从
  build 852

在环境中查找名称。

在文件 NPLA.cpp 第 969 行定义.

引用了 Bindings, ystdex::map< _tKey, _tMapped, _fComp, _tAlloc >::cend(), ystdex::compose(), ystdex::cpp2017::data(), ystdex::map< _tKey, _tMapped, _fComp, _tAlloc >::find(), ystdex::make_observer() , 以及 YAssertNonnull.

被这些函数引用 Replace().

函数调用图:
这是这个函数的调用关系图:

## ◆ PDefH()

NPL::Environment::PDefH | ( | void | ,
|  | swap | ,
|  | Environment & | x,
|  | Environment & | y
| ) |  |

自从
  build 746

## ◆ PDefHOp()

YB_ATTR_nodiscard YB_PURE friend NPL::Environment::PDefHOp | ( | bool | ,
|  | const Environment & | x,
|  | const Environment & | y
| ) |  |

inline

判断锚对象未被外部引用。

自从
  build 830

取锚对象指针。

自从
  build 856

取锚对象指针的引用计数。

自从
  build 847

取名称绑定映射。

自从
  build 788

添加绑定。

自从
  build 852

在文件 NPLA.h 第 2126 行定义.

引用了 CHRLib::args, YSLib::NoContainer, ystdex::try_emplace() , 以及 yforward.

函数调用图:

## ◆ Replace()

bool NPL::Environment::Replace | ( | string_view | id,
|  | ValueObject && | vo
| ) |  |

以字符串为标识符在指定上下文的名称查找结果中替换定义。

注解
  若定义不存在则忽略。

返回
  是否成功替换。

自从
  build 899

在文件 NPLA.cpp 第 994 行定义.

引用了 LookupName(), platform::p, swap , 以及 YSLib::vo.

被这些函数引用 ReplaceChecked().

函数调用图:
这是这个函数的调用关系图:

## ◆ ReplaceChecked()

void NPL::Environment::ReplaceChecked | ( | string_view | id,
|  | ValueObject && | vo
| ) |  |

以字符串为标识符在指定上下文的名称查找结果中替换已存在的定义。

异常

  BadIdentifier | 定义不存在。

在文件 NPLA.cpp 第 1005 行定义.

引用了 Replace() , 以及 YSLib::vo.

函数调用图:

## ◆ ThrowForInvalidType()

void NPL::Environment::ThrowForInvalidType | ( | const ystdex::type_info & | tp | ) |

static

对不符合环境要求的类型抛出异常。

异常

  TypeError | 环境类型检查失败。

自从
  build 799

在文件 NPLA.cpp 第 1012 行定义.

引用了 ystdex::sfmt().

被这些函数引用 NPL::ImplDeDtor() , 以及 NPL::ResolveEnvironment().

函数调用图:
这是这个函数的调用关系图:

## ◆ ThrowForInvalidValue()

void NPL::Environment::ThrowForInvalidValue | ( | bool | record = `{}` | ) |

static

抛出无效环境值异常。

异常

  std::invalid_argument | 环境宿主值失败。

注解
  参数指定是否用于构造上下文，决定不同的异常消息。
  用于对不符合作为对象语言中有效环境引用的值的宿主值抛出异常。

自从
  build 871

在文件 NPLA.cpp 第 1019 行定义.

被这些函数引用 NPL::ContextNode::ContextNode() , 以及 EnsureValid().

这是这个函数的调用关系图:

## 友元及相关函数文档

## ◆ AllocateEnvironment()

template<typename... _tParams>

shared_ptr< Environment > AllocateEnvironment | ( | const Environment::allocator_type & | a,
|  | _tParams &&... | args
| ) |  |

related

分配环境。

自从
  build 847
  build 867

在文件 NPLA.h 第 2911 行定义.

引用了 YSLib::a, CHRLib::args , 以及 yforward.

## ◆ Bindings

friend y Bindings

friend

在文件 NPLA.h 第 2321 行定义.

## ◆ swap

y swap | ( | x. | Parent,
|  | y. | Parent
| ) |  |

friend

被这些函数引用 Define() , 以及 Replace().

## 类成员变量说明

## ◆ Bindings

BindingMap NPL::Environment::Bindings

mutable

自从
  build 788

在文件 NPLA.h 第 2025 行定义.

被这些函数引用 NPL::EmplaceLeaf(), InitAnchor() , 以及 LookupName().

## ◆ Frozen

bool NPL::Environment::Frozen = {}

冻结状态。

参见
  MakeTermTags

自从
  build 871

在文件 NPLA.h 第 2037 行定义.

## ◆ p_anchor

AnchorPtr NPL::Environment::p_anchor {InitAnchor()}

private

锚对象指针：提供被引用计数。

自从
  build 869

在文件 NPLA.h 第 2044 行定义.

## ◆ Parent

ValueObject NPL::Environment::Parent {}

父环境：被解释的重定向目标。

参见
  ContextNode::DefaultResolve

自从
  build 798

在文件 NPLA.h 第 2031 行定义.

## ◆ RemoveChecked

void NPL::Environment::RemoveChecked

根据当前状态创建指定项的引用。

注解
  项通常表示当前环境对象所有的被绑定对象。

自从
  build 871

前置条件
  断言：第一参数的数据指针非空。

警告
  应避免对被替换或移除的值的悬空引用。

自从
  build 867

以字符串为标识符在指定上下文移除定义。

返回
  是否成功移除。

以字符串为标识符在指定上下文移除定义并检查是否成功。

异常

  BadIdentifier | 定义不存在。

在文件 NPLA.h 第 2282 行定义.

该类的文档由以下文件生成:

- NPLA.h
- NPLA.cpp