YSTest: ystdex::any_ops 命名空间参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

命名空间 | 类 | 类型定义 | 枚举 | 函数 | 变量
ystdex::any_ops 命名空间参考
YBase Replacement extensions

## 命名空间

| details

## 类

class | allocator_holder_handler
| 使用分配器的动态泛型对象持有者处理器。 更多...
class | allocator_value_handler
| 分配器处理器。 更多...
union | any_local_data
| 能被动态泛型对象原地存储的数据类型。 更多...
union | any_trivial_local_data
| 能被动态泛型对象平凡原地存储的数据类型。 更多...
class | bidirectional_iterator_handler
class | forward_iterator_handler
class | holder
| 抽象动态泛型持有者接口。 更多...
class | holder_handler
| 动态泛型对象持有者处理器。 更多...
class | input_iterator_handler
class | iterator_handler
class | pointer_holder
| 指针类型动态泛型持有者。 更多...
class | ref_handler
| 动态泛型引用处理器。 更多...
struct | use_holder_t
| 使用持有者标记。 更多...
class | value_handler
| 动态泛型对象值处理器。 更多...
class | value_holder
| 值类型动态泛型持有者。 更多...
struct | with_handler_t
struct | wrap_handler
| 根据类型选择引用或值处理器。 更多...

## 类型定义

using | op_code = std::uint32_t
| 操作码。 更多...
using | any_storage = standard_layout_storage< aligned_storage_t< sizeof(any_local_data), std::alignment_of< any_local_data >::value > >
using | any_manager = void(*)(any_storage &, any_storage &, op_code)
| 动态泛型对象管理操作。 更多...
template<class _tHandler , typename... _tParams>
using | is_handler_constructible_t = is_constructible< any_ops::any_manager, decltype(any_ops::construct< _tHandler >(std::declval< any_ops::any_storage & >(), std::declval< _tParams >()...))>
| 判断处理器是否能被指定参数构造。 更多...
template<typename _type >
using | is_in_place_storable = and_< is_aligned_storable< any_storage, _type > >
| 判断类型是否可以作为 any_storage 原地存储。 更多...
template<class _tHolder >
using | check_holder_t = and_< is_decayed< _tHolder >, is_class< _tHolder >, is_base_of< holder, _tHolder >, is_convertible< _tHolder &, holder & > >
| 检查参数是否可作为持有者类型。 更多...
template<class _tAlloc , typename _type >
using | allocator_value_handler_t = allocator_value_handler< rebind_alloc_t< _tAlloc, byte >, _type >
| 取重绑定 byte 分配器的使用分配器构造时的处理器。 更多...
template<class _tAlloc , class _tHolder >
using | allocator_holder_handler_t = allocator_holder_handler< rebind_alloc_t< _tAlloc, byte >, _tHolder >
| 取重绑定 byte 分配器的使用分配器和持有者构造时的处理器。 更多...

## 枚举

enum | base_op : op_code { no_op, get_type, get_ptr, clone, destroy, get_holder_type, get_holder_ptr, get_allocator_type, get_allocator_ptr, clone_with_allocator, transfer_with_allocator, end_base_op }
| 基本操作码。 更多...
enum | iterator_op : op_code { check_undereferenceable = end_base_op, dereference, increase, end_iterator_op }
enum | input_iterator_op : op_code { equals = end_iterator_op, end_input_iterator_op, end_output_iterator_op = end_input_iterator_op, end_forward_iterator_op = end_input_iterator_op }
enum | bidirectional_iteartor_op : op_code { decrease = end_forward_iterator_op, end_bidirectional_iterator_op }
enum | random_access_iteartor_op : op_code { advance = end_forward_iterator_op, distance, less_compare, end_random_access_iteartor_op }

## 函数

template<class _tHandler , typename... _tParams>
auto | construct (any_storage &storage, _tParams &&... args) -> enable_if_t< is_convertible< well_formed_t< decltype(_tHandler::manage), decltype(_tHandler::init(storage, std::forward< decltype(args)>(args)...))>, any_manager >::value, any_manager >
| 使用指定处理器初始化存储。 更多...

## 变量

const struct ystdex::any_ops::use_holder_t | use_holder

## 详细描述

参见
  any

自从
  build 354

## 类型定义说明

## ◆ allocator_holder_handler_t

template<class _tAlloc , class _tHolder >

using ystdex::any_ops::allocator_holder_handler_t = typedef allocator_holder_handler< rebind_alloc_t<_tAlloc, byte>, _tHolder>

取重绑定 byte 分配器的使用分配器和持有者构造时的处理器。

在文件 any.h 第 1055 行定义.

## ◆ any_manager

using ystdex::any_ops::any_manager = typedef void(*)(any_storage&, any_storage&, op_code)

动态泛型对象管理操作。

自从
  build 352

在文件 any.h 第 410 行定义.

## ◆ any_storage

using ystdex::any_ops::any_storage = typedef standard_layout_storage<aligned_storage_t< sizeof(any_local_data), std::alignment_of< any_local_data >::value> >

自从
  build 352

在文件 any.h 第 404 行定义.

## ◆ op_code

using ystdex::any_ops::op_code = typedef std::uint32_t

操作码。

参见
  any_manager

自从
  build 354

指定动态分发的操作。 以相关的枚举值指定操作名称。 约定 `get_*` 命名的参数要求第一参数中已构造特定类型的对象；否则行为未定义。

在文件 any.h 第 237 行定义.

## 枚举类型说明

## ◆ base_op

enum ystdex::any_ops::base_op : op_code

基本操作码。

参见
  any_manager

自从
  build 354

指示管理操作的标量。 管理操作用于维护储存或引用的对象，这些对象可能不通过管理操作构造。 按管理操作中参数位置，可以处理目标对象和源对象。 通常源对象是被管理的对象，目标对象可能是被管理的对象或操作结果对象。 管理操作被管理器作为 static 成员函数或成员模板实现。 未被处理的对象在实现中应被忽略，不依赖其中的状态。 特定操作对接受的目标和源对象有前置条件。

枚举值

no_op

空操作：表示不处理的默认值。

自从
  build 355

get_type | 取被管理的对象的类型。 取源对象的类型，结果为 const type_info& 。 要求已构造结果对象类型 const type_info* ，用于保存结果。 若源对象不存在，则结果为 ystdex::type_id<void> 。
get_ptr | 取指向被管理的对象的指针。 取指向源对象的指针，结果为 void* 。 要求已构造结果对象类型 void* ，用于保存结果。 结果总是指向对象的非空指针。 若源对象不存在，则抛出异常。

clone

复制被管理的对象的处理器。

参见
  invalid_construction

复制构造对象，置于结果对象。 要求无构造目标对象和已构造的源对象。 复制操作由对象的复制构造函数确定。 若源对象不满足可被复制构造，管理操作的实现应抛出 invalid_construction 异常。

destroy | 销毁被管理的对象。 销毁目标对象。 要求已构造目标对象。

get_holder_type

取持有者的类型。

参见
  holder_handler

取源对象关联的持有者的类型，结果为 const type_info& 。 要求已构造结果对象类型 const type_info* ，用于保存结果。 若持有者不存在，则结果为 ystdex::type_id<void> 。

get_holder_ptr

取指向持有者的指针。

参见
  holder

取指向源对象关联的持有者的指针，结果为 holder* 。 要求已构造结果对象类型 holder* ，用于保存结果。 若持有者不存在，则结果为空指针。

get_allocator_type

取重绑定到 byte 的分配器的类型。

参见
  allocator_value_handler
  allocator_holder_handler

自从
  build 848

取源对象保存的分配器的类型，结果为 const type_info& 。 要求已构造结果对象类型 const type_info* ，用于保存结果。 若分配器不存在，则结果为 ystdex::type_id<void> 。

get_allocator_ptr

取指向重绑定到 byte 的分配器对象的指针。

自从
  build 864

取指向源对象保存的分配器的指针，结果为 void* 。 要求已构造结果对象类型 void* ，用于保存结果。 若分配器不存在，则结果为空指针。

clone_with_allocator | 以分配器复制。 以指定分配器复制构造对象，置于结果对象。 要求重绑定到 byte 的分配器的指针类型的目标对象； 要求以 std::unique_ptr 实例为类型的非空指针作为源对象， 且其删除器是持有分配器的 allocator_delete 实例； 要求目标对象表示的分配器和源对象中删除器的分配器类型相同。 若源对象不满足可被复制构造，管理操作的实现应抛出 invalid_construction 异常。
transfer_with_allocator | 以分配器转移。 以指定分配器转移（可能转移存储或转移构造）对象，置于结果对象。 要求重绑定到 byte 的分配器的指针类型的目标对象； 要求以 std::unique_ptr 实例为类型的非空指针作为源对象， 且其删除器是持有分配器的 allocator_delete 实例； 要求目标对象表示的分配器和源对象中删除器的分配器类型相同。 当目标对象表示的分配器和源对象中删除器的分配器相等，直接交换存储； 否则转移构造对象。 若需转移构造对象，且源对象不满足可被转移构造， 管理操作的实现应抛出 invalid_construction 异常。

end_base_op

结束操作标记。

自从
  build 355

可被扩展操作码使用的起始值。

在文件 any.h 第 252 行定义.

## ◆ bidirectional_iteartor_op

enum ystdex::any_ops::bidirectional_iteartor_op : op_code

枚举值

decrease

注解
  要求已构造目标对象。

end_bidirectional_iterator_op |

在文件 any_iterator.hpp 第 70 行定义.

## ◆ input_iterator_op

enum ystdex::any_ops::input_iterator_op : op_code

枚举值

equals

注解
  要求已构造有效的 any_storage* ；转换为 bool 类型的值为操作结果。

end_input_iterator_op |
end_output_iterator_op |
end_forward_iterator_op |

在文件 any_iterator.hpp 第 60 行定义.

## ◆ iterator_op

enum ystdex::any_ops::iterator_op : op_code

自从
  build 355

枚举值

check_undereferenceable

注解
  要求已构造对象类型 bool 。

自从
  build 400

dereference

注解
  要求已构造对象类型 void_ref 。

increase

注解
  要求已构造目标对象。

end_iterator_op |

在文件 any_iterator.hpp 第 45 行定义.

## ◆ random_access_iteartor_op

enum ystdex::any_ops::random_access_iteartor_op : op_code

枚举值

advance

注解
  要求已构造目标对象。

distance |
less_compare |
end_random_access_iteartor_op |

在文件 any_iterator.hpp 第 78 行定义.

## 函数说明

## ◆ construct()

template<class _tHandler , typename... _tParams>

auto ystdex::any_ops::construct | ( | any_storage & | storage,
|  | _tParams &&... | args
| ) |  | -> enable_if_t< is_convertible<well_formed_t<decltype(_tHandler::manage), decltype(_tHandler::init(storage, std::forward<decltype( args )>( args )...))>, any_manager>::value, any_manager>

使用指定处理器初始化存储。

自从
  build 851

在文件 any.h 第 418 行定义.

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

被这些函数引用 ystdex::details::optional_base< _type, true >::construct(), ystdex::details::list_rep< _type, std::allocator< _type > >::construct_node(), ystdex::details::rb_tree::tree< key_type, value_type, first_of<>, key_compare, allocator_type >::construct_node(), ystdex::create_with_allocator(), ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tHolder >::init() , 以及 ystdex::details::optional_base< _type, true >::optional_base().

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

## 变量说明

## ◆ use_holder

const struct ystdex::any_ops::use_holder_t ystdex::any_ops::use_holder

被这些函数引用 YSLib::HolderOperations< _tHolder >::CreateInPlaceConditionally(), YSLib::HolderOperations< _tHolder >::CreateInPlaceImpl(), YSLib::HolderOperations< _tHolder >::CreateInPlaceWithAllocatorImpl(), ystdex::details::any_emplace< any >::emplace(), YSLib::ValueObject::emplace() , 以及 NPL::A1::ParseLeafWithSourceInformation().