YSTest: Helper Functions

YSTest PreAlpha_b900_20201012 The YSLib Test Project

模块 | 命名空间 | 函数 | 变量
Helper Functions

助手功能。 更多...

Helper Functions 的协作图:

## 模块

| Get Unique Pointer
| 使用指定类型指针构造 std::unique_ptr 实例。
| Get Shared Pointer
| 使用指定类型指针构造 std::shared_ptr 实例。

## 命名空间

| ystdex::cpp2014
| 使用 new 和指定参数构造指定类型的 std::unique_ptr 对象。
| YSLib::DS::UI
| Shell 快捷操作。

## 函数

template<class _tCon , typename _tIter >
_tCon | ystdex::make_container (_tIter first, _tIter last)
| 构造指定类型的容器。 更多...
template<class _tAssocCon , typename _tKey , typename _func >
auto | ystdex::replace_value (_tAssocCon &con, const _tKey &k, _func f) -> decltype(con.emplace_hint(con.erase(con.find(k)), f(*con.find(k))))
| 替换关联容器的值。 更多...
template<typename _type >
size_t | ystdex::hash_combine_seq (size_t seed, const _type &val)
| 重复计算序列散列。 更多...
template<typename _tIter , typename _tRet = cond_t<is_throwing_move_copyable< typename std::iterator_traits<_tIter>::value_type>, _tIter, std::move_iterator<_tIter>>>
_tRet | ystdex::make_move_if_noexcept_iterator (_tIter it)
| 按 std::move_if_noexcept 的条件构造转移迭代器或非转移迭代器。 更多...
template<typename _type , typename... _tParams>
optional< _type > | ystdex::cpp2017::make_optional (_tParams &&... args)
| 创建 optional 对象。 更多...
template<typename _type >
enable_if_convertible_t< _type, decay_t< _type >, decay_t< _type > > | ystdex::decay_copy (_type &&arg)
| 退化复制。 更多...
template<class _tShell >
_tShell & | YSLib::FetchShell ()
| 取指定 Shell 句柄对应的 Shell 引用 。 更多...
| YSLib::PDefH (shared_ptr< Shell >, FetchShellHandle,) ynothrow ImplRet(FetchAppInstance().GetShellHandle()) inline PDefH(bool
| 取当前应用程序线程空间中活动的 Shell 句柄。 更多...
template<VisualEvent _vID>
EventOf< _vID > & | YSLib::UI::FetchEvent (IWidget &wgt)
| 取部件事件。 更多...
| YSLib::UI::PDefH (void, RequestFocus, IWidget &wgt) ImplExpr(RequestFocusFrom(wgt
| 向部件容器释放获得焦点，成功后向自身发送 GotFocus 事件。 更多...
wgt | YSLib::UI::PDefH (void, ReleaseFocus, IWidget &wgt) ImplExpr(ReleaseFocusFrom(wgt
| 释放焦点，成功后向自身发送 LostFocus 事件。 更多...
template<typename _tIn >
void | YSLib::UI::Styles::AddHandlers (HandlerTable &table, std::type_index idx, _tIn first, _tIn last)
| 向样式处理器表添加指定类型的处理器。 更多...
YB_ATTR_nodiscard YB_PURE pt pt Y YB_ATTR_nodiscard YB_PURE | YSLib::UI::PDefH (observer_ptr< IWidget >, FetchContainerPtr, const IWidget &wgt) ImplRet(wgt.GetView().ContainerPtr) YB_ATTR_nodiscard YB_PURE inline PDefH(observer_ptr< IWidget >
| 取部件的容器指针。 更多...
YB_ATTR_nodiscard YB_PURE pt pt Y YB_ATTR_nodiscard YB_PURE const IWidget &wgt | YSLib::UI::ImplRet (wgt.GetView().FocusingPtr) YB_ATTR_nodiscard YB_PURE inline PDefH(Point
| 取部件位置。 更多...
YB_ATTR_nodiscard YB_PURE pt pt Y YB_ATTR_nodiscard YB_PURE const IWidget &wgt const IWidget &wgt | YSLib::UI::ImplRet (wgt.GetView().GetLocation()) YB_ATTR_nodiscard YB_PURE inline PDefH(Size
| 取部件大小。 更多...
template<VisualEvent _vID>
YB_ATTR_nodiscard EventOf< _vID > & | YSLib::UI::FetchEvent (VisualEventMap &m)
| 取控件事件。 更多...
template<VisualEvent _vID>
YB_ATTR_nodiscard EventOf< _vID > & | YSLib::UI::FetchEvent (AController &controller)
| 取部件事件。 更多...
template<typename _type , typename... _tParams>
any | make_any (_tParams &&... args)
| 创建 any 对象。 更多...
template<typename _fHandler , typename _fCallable >
expanded_caller< _fHandler, _fCallable > | make_expanded (_fCallable f)
| 构造接受冗余参数的可调用对象。 更多...
template<typename _tIter , typename _fTrans >
transformed_iterator< decay_t< _tIter >, _fTrans > | make_transform (_tIter &&i, _fTrans f)
| 创建变换迭代器。 更多...
template<typename _tIter , typename _tSize = make_unsigned_t< typename std::iterator_traits<decay_t<_tIter>>::difference_type>>
transposed_iterator< decay_t< _tIter > > | make_transposed (_tIter &&i, _tSize w, _tSize h)
template<typename _type , typename _fUpdater >
prototyped_iterator< _type, _fUpdater > | make_prototyped_iterator (_type &proto, size_t i, _fUpdater f)
| 创建原型迭代器。 更多...
YF_API unique_ptr< WConsole > | MakeWConsole (unsigned long=STD_OUTPUT_HANDLE)
| 创建控制台对象。 更多...

## 变量

in_place_tag | ystdex::uniformed_tags::in_place (empty_base<>)
| 原地标记函数。 更多...

## 详细描述

助手功能。

自从
  build 243

仅帮助简化编码形式或确定接口，并不包含编译期之后逻辑功能实现的代码设施。

## 函数说明

## ◆ AddHandlers()

template<typename _tIn >

void YSLib::UI::Styles::AddHandlers | ( | HandlerTable & | table,
|  | std::type_index | idx,
|  | _tIn | first,
|  | _tIn | last
| ) |  |

向样式处理器表添加指定类型的处理器。

注解
  被添加的值需能表示为 StyleItem 和 Handler 的有序对， 使用 ADL get<0U> 和 get<1U> 实现访问其中的成员。

自从
  build 469

在文件 YStyle.h 第 402 行定义.

引用了 ystdex::ref().

函数调用图:

## ◆ decay_copy()

template<typename _type >

enable_if_convertible_t<_type, decay_t<_type>, decay_t<_type> > ystdex::decay_copy | ( | _type && | arg | ) |

inline

退化复制。

参见
  ISO C++11 30.2.6 [thread.decaycopy] 。
  WG21 N3255 。

自从
  build 650

在文件 utility.hpp 第 114 行定义.

引用了 yforward.

被这些函数引用 ystdex::cast_array(), YSLib::ImplRet(), ystdex::make_array() , 以及 YSLib::MakeNode().

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

## ◆ FetchEvent() [1/3]

template<VisualEvent _vID>

YB_ATTR_nodiscard EventOf<_vID>& YSLib::UI::FetchEvent | ( | AController & | controller | ) |

取部件事件。

模板参数

  _vID | 指定事件类型。

参数

  controller | 指定部件的控制器。

异常

  BadEvent | 异常中立：由控制器抛出。

注解
  需要确保 EventTypeMapping 中有对应的 EventType ，否则无法匹配此函数模板。
  若控件事件不存在则自动添加空事件。

自从
  build 572

在文件 YWidgetEvent.h 第 721 行定义.

引用了 YSLib::UI::AController::GetEventRef.

## ◆ FetchEvent() [2/3]

template<VisualEvent _vID>

EventOf<_vID>& YSLib::UI::FetchEvent | ( | IWidget & | wgt | ) |

inline

取部件事件。

模板参数

  _vID | 指定事件类型。

参数

  wgt | 指定部件。

异常

  BadEvent | 异常中立：由控制器抛出。

注解
  需要确保 EventTypeMapping 中有对应的 EventType ，否则无法匹配此函数模板。
  若控件事件不存在则自动添加空事件。

自从
  build 572

在文件 YControl.h 第 137 行定义.

引用了 YSLib::UI::wgt.

## ◆ FetchEvent() [3/3]

template<VisualEvent _vID>

YB_ATTR_nodiscard EventOf<_vID>& YSLib::UI::FetchEvent | ( | VisualEventMap & | m | ) |

取控件事件。

注解
  需要确保 EventTypeMapping 中有对应的 EventType ，否则无法匹配此函数模板。
  若控件事件不存在则自动添加空事件。

自从
  build 572

在文件 YWidgetEvent.h 第 704 行定义.

引用了 YSLib::UI::GetMappedEvent().

函数调用图:

## ◆ FetchShell()

template<class _tShell >

_tShell& YSLib::FetchShell | ( |  | ) |

inline

取指定 Shell 句柄对应的 Shell 引用 。

自从
  build 205

在文件 ShellHelper.h 第 131 行定义.

引用了 platform::Deref().

函数调用图:

## ◆ hash_combine_seq()

template<typename _type >

size_t ystdex::hash_combine_seq | ( | size_t | seed,
|  | const _type & | val
| ) |  |

inline

重复计算序列散列。

参见
  hash_combine

在文件 hash.hpp 第 67 行定义.

引用了 ystdex::hash_combine().

被这些函数引用 ystdex::details::combined_hash_tuple< _type, index_sequence< _vSeq... > >::call() , 以及 ystdex::hash_combine_seq().

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

## ◆ ImplRet() [1/2]

YB_ATTR_nodiscard YB_PURE pt pt Y YB_ATTR_nodiscard YB_PURE const IWidget& wgt YSLib::UI::ImplRet | ( | wgt.GetView(). | FocusingPtr | ) |

取部件位置。

自从
  build 569

## ◆ ImplRet() [2/2]

YB_ATTR_nodiscard YB_PURE pt pt Y YB_ATTR_nodiscard YB_PURE const IWidget& wgt const IWidget& wgt YSLib::UI::ImplRet | ( | wgt. | GetView).GetLocation( | ) |

取部件大小。

自从
  build 569

## ◆ make_any()

template<typename _type , typename... _tParams>

any make_any | ( | _tParams &&... | args | ) |

related

创建 any 对象。

参见
  ISO C++17 [any.nonmembers] 。
  WG21 P0032R3 。

自从
  build 717

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

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

## ◆ make_container()

template<class _tCon , typename _tIter >

_tCon ystdex::make_container | ( | _tIter | first,
|  | _tIter | last
| ) |  |

inline

构造指定类型的容器。

自从
  build 532

在文件 container.hpp 第 51 行定义.

## ◆ make_expanded()

template<typename _fHandler , typename _fCallable >

expanded_caller< _fHandler, _fCallable > make_expanded | ( | _fCallable | f | ) |

related

构造接受冗余参数的可调用对象。

自从
  build 849

在文件 functional.hpp 第 616 行定义.

引用了 CHRLib::f().

函数调用图:

## ◆ make_move_if_noexcept_iterator()

template<typename _tIter , typename _tRet = cond_t<is_throwing_move_copyable< typename std::iterator_traits<_tIter>::value_type>, _tIter, std::move_iterator<_tIter>>>

_tRet ystdex::make_move_if_noexcept_iterator | ( | _tIter | it | ) |

inline

按 std::move_if_noexcept 的条件构造转移迭代器或非转移迭代器。

自从
  build 866

在文件 iterator_op.hpp 第 128 行定义.

被这些函数引用 ystdex::details::list_rep< _type, std::allocator< _type > >::list_rep() , 以及 ystdex::details::list_rep< _type, std::allocator< _type > >::move_assign_elements().

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

## ◆ make_optional()

template<typename _type , typename... _tParams>

optional<_type> ystdex::cpp2017::make_optional | ( | _tParams &&... | args | ) |

创建 optional 对象。

参见
  WG21 P0032R3 。

自从
  build 717

在文件 optional.h 第 902 行定义.

引用了 CHRLib::args, ystdex::uniformed_tags::in_place , 以及 yforward.

## ◆ make_prototyped_iterator()

template<typename _type , typename _fUpdater >

prototyped_iterator< _type, _fUpdater > make_prototyped_iterator | ( | _type & | proto,
|  | size_t | i,
|  | _fUpdater | f
| ) |  |

related

创建原型迭代器。

自从
  build 522

在文件 iterator.hpp 第 1174 行定义.

引用了 CHRLib::f() , 以及 YSLib::i.

函数调用图:

## ◆ make_transform()

template<typename _tIter , typename _fTrans >

transformed_iterator< decay_t< _tIter >, _fTrans > make_transform | ( | _tIter && | i,
|  | _fTrans | f
| ) |  |

related

创建变换迭代器。

自从
  build 529

在文件 iterator.hpp 第 434 行定义.

引用了 CHRLib::f(), YSLib::i , 以及 yforward.

函数调用图:

## ◆ make_transposed()

template<typename _tIter , typename _tSize = make_unsigned_t< typename std::iterator_traits<decay_t<_tIter>>::difference_type>>

transposed_iterator< decay_t< _tIter > > make_transposed | ( | _tIter && | i,
|  | _tSize | w,
|  | _tSize | h
| ) |  |

related

自从
  build 575

在文件 iterator.hpp 第 1075 行定义.

引用了 YSLib::i, YSLib::Drawing::w , 以及 yforward.

## ◆ MakeWConsole()

YF_API unique_ptr< WConsole > MakeWConsole | ( | unsigned long | = `STD_OUTPUT_HANDLE` | ) |

related

创建控制台对象。

返回
  指向新创建的控制台对象的指针，若失败则为空。

注解
  不抛出 Win32Exception 。

自从
  build 593

## ◆ PDefH() [1/4]

YB_ATTR_nodiscard YB_PURE pt pt Y YB_ATTR_nodiscard YB_PURE YSLib::UI::PDefH | ( | observer_ptr< IWidget > | ,
|  | FetchContainerPtr | ,
|  | const IWidget & | wgt
| ) |  |

inline

取部件的容器指针。

注解
  使用此函数确保返回值传递的值语义。

自从
  build 672

取焦点对象指针。

返回
  若为保存了子部件中的焦点对象的容器则返回指针，否则返回 `nullptr` 。

自从
  build 672

## ◆ PDefH() [2/4]

YSLib::PDefH | ( | shared_ptr< Shell > | ,
|  | FetchShellHandle |
| ) |  |

inline

取当前应用程序线程空间中活动的 Shell 句柄。

警告
  应用程序实例初始化前不保证线程安全性。

激活 Shell 对象：控制权转移给此对象以维持单线程运行。

前置条件
  断言： `bool(hShl)` 。

警告
  不保证线程安全性。

## ◆ PDefH() [3/4]

wgt YSLib::UI::PDefH | ( | void | ,
|  | ReleaseFocus | ,
|  | IWidget & | wgt
| ) |  |

inline

释放焦点，成功后向自身发送 LostFocus 事件。

## ◆ PDefH() [4/4]

YSLib::UI::PDefH | ( | void | ,
|  | RequestFocus | ,
|  | IWidget & | wgt
| ) |  |

inline

向部件容器释放获得焦点，成功后向自身发送 GotFocus 事件。

## ◆ replace_value()

template<class _tAssocCon , typename _tKey , typename _func >

auto ystdex::replace_value | ( | _tAssocCon & | con,
|  | const _tKey & | k,
|  | _func | f
| ) |  | -> decltype(con.emplace_hint(con.erase(con.find(k)), f(*con.find(k))))

替换关联容器的值。

注解
  使用 `ystdex::end` 指定范围迭代器。

自从
  build 531

待办事项:
  支持没有 `emplace_hint` 成员的关联容器。

在文件 container.hpp 第 774 行定义.

引用了 ystdex::cpp2017::end(), CHRLib::f() , 以及 YSLib::i.

函数调用图:

## 变量说明

## ◆ in_place

in_place_tag ystdex::uniformed_tags::in_place(size_t_< _vIdx >)

inline

原地标记函数。

警告
  调用引起未定义行为。

注解
  注意 std::optional 不需要支持 std::in_place 作为值存储。

在文件 placement.hpp 第 205 行定义.

被这些函数引用 ystdex::cpp2017::make_optional() , 以及 ystdex::cpp2017::make_optional_inplace().