YSTest: Helper Functions

YSTest PreAlpha_b800_20170810 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

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

助手功能。 更多...

Helper Functions 的协作图:

## 模块

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

## 命名空间

| YSLib::DS::UI
| Shell 快捷操作。

## 函数

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 , typename _tValue >
std::unique_ptr< _type > | ystdex::make_unique (std::initializer_list< _tValue > il)
| 使用指定类型的初始化列表构造指定类型的 std::unique_ptr 对象。 更多...
template<typename _type >
enable_if_convertible_t< _type, decay_t< _type >, decay_t< _type > > | ystdex::decay_copy (_type &&arg)
| 退化复制。 更多...
| YSLib::PDefH (shared_ptr< Shell >, FetchShellHandle,) ynothrow ImplRet(FetchAppInstance().GetShellHandle()) inline PDefH(bool
| 取当前应用程序线程空间中活动的 Shell 句柄。 更多...
template<VisualEvent _vID>
GEvent< typename EventTypeMapping< _vID >::HandlerType::FuncType > & | 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 事件。 更多...
pt pt Y | YSLib::UI::PDefH (observer_ptr< IWidget >, FetchContainerPtr, const IWidget &wgt) ImplRet(wgt.GetView().ContainerPtr) inline PDefH(observer_ptr< IWidget >
| 取部件的容器指针。 更多...
pt pt Y const IWidget &wgt | YSLib::UI::ImplRet (wgt.GetView().FocusingPtr) inline PDefH(Point
| 取部件位置。 更多...
pt pt Y const IWidget &wgt const IWidget &wgt | YSLib::UI::ImplRet (wgt.GetView().GetLocation()) inline PDefH(Size
| 取部件大小。 更多...
template<VisualEvent _vID>
GEvent< typename EventTypeMapping< _vID >::HandlerType::FuncType > & | YSLib::UI::FetchEvent (VisualEventMap &m)
| 取控件事件。 更多...
template<VisualEvent _vID>
GEvent< typename EventTypeMapping< _vID >::HandlerType::FuncType > & | YSLib::UI::FetchEvent (AController &controller)
| 取部件事件。 更多...
template<typename _fHandler , typename _fCallable >
expanded_caller< _fHandler, decay_t< _fCallable > > | make_expanded (_fCallable &&f)
| 构造接受冗余参数的可调用对象。 更多...
template<typename _tIter , typename _fTrans >
transformed_iterator< decay_t< _tIter >, _fTrans > | make_transform (_tIter &&i, _fTrans f)
| 创建变换迭代器。 更多...
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)
| 创建控制台对象。 更多...
template<typename _type , typename... _tParams>
any | make_any (_tParams &&...args)
| 创建 any 对象。 更多...
template<class _tCon , typename _tIter >
_tCon | ystdex::make_container (_tIter first, _tIter last)
| 构造指定类型的容器。 更多...
template<class _tCon , typename _tRange >
_tCon | ystdex::make_container (_tRange &&c)
template<class _tCon , typename _tRange , typename _func >
_tCon | ystdex::make_container (_tRange &&c, _func f)
template<typename _type >
size_t | ystdex::hash_combine_seq (size_t seed, const _type &val)
| 重复计算序列散列。 更多...
template<typename _type , typename... _tParams>
size_t | ystdex::hash_combine_seq (size_t seed, const _type &val, const _tParams &...args)
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 _tIter >
std::reverse_iterator< _tIter > | ystdex::make_reverse_iterator (_tIter i)
| 构造反向迭代器。 更多...
template<typename _tIter1 , typename _tIter2 >
auto | ystdex::make_move_iterator_pair (_tIter1 it1, _tIter2 it2) -> decltype(std::make_pair(std::make_move_iterator(it1), std::make_move_iterator(it2)))
| 构造转移迭代器对。 更多...
template<typename _tRange >
auto | ystdex::make_move_iterator_pair (_tRange &c) -> decltype(ystdex::make_move_iterator_pair(c.begin(), c.end()))
| 构造指定序列范围（包含序列容器及内建数组等）的转移迭代器对。 更多...
template<typename _type , typename _tValue >
std::shared_ptr< _type > | ystdex::make_shared (std::initializer_list< _tValue > il)
| 使用指定类型的初始化列表构造指定类型的 std::shared_ptr 对象。 更多...
template<typename _type >
std::weak_ptr< _type > | ystdex::make_weak (const std::shared_ptr< _type > &p)
| 使用指定的 std::shared_ptr 实例的对象创建对应的 std::weak_ptr 实例的对象。 更多...
template<typename _type , typename... _tParams>
enable_if_t<!is_array< _type >::value, std::unique_ptr< _type > > | ystdex::cpp2014::make_unique (_tParams &&...args)
| 使用 new 和指定参数构造指定类型的 std::unique_ptr 对象。 更多...
template<typename _type , typename... _tParams>
enable_if_t< is_array< _type >::value &&extent< _type >::value==0, std::unique_ptr< _type > > | ystdex::cpp2014::make_unique (size_t size)
template<typename _type , typename... _tParams>
enable_if_t< extent< _type >::value!=0 > | ystdex::cpp2014::make_unique (_tParams &&...)=delete
template<typename _type , typename... _tParams>
optional< _type > | ystdex::make_optional (_tParams &&...args)
| 创建 optional 对象。 更多...
in_place_tag | ystdex::in_place (empty_base<>)
| 原地标记函数。 更多...
template<class _tShell >
_tShell & | YSLib::FetchShell ()
| 取指定 Shell 句柄对应的 Shell 引用 。 更多...
| YSLib::PDefH (bool, IsNowShell, const shared_ptr< Shell > &hShl) ImplRet(FetchAppInstance().GetShellHandle()
| 判断句柄指定的 Shell 是否为当前线程空间中运行的 Shell 。 更多...
yconstexpr const char *const | YSLib::DefaultTimeFormat ("%04u-%02u-%02u %02u:%02u:%02u")
| 默认时间格式字符串。 更多...
YF_API YB_ATTR_returns_nonnull const char * | YSLib::TranslateTime (const std::tm &, const char *=DefaultTimeFormat)
| 格式化时间字符串。 更多...
YF_API YB_ATTR_returns_nonnull const char * | YSLib::TranslateTime (const std::time_t &, const char *=DefaultTimeFormat)
template<typename _tIn >
void | YSLib::UI::Styles::AddHandlers (HandlerTable &table, std::type_index idx, _tIn first, _tIn last)
| 向样式处理器表添加指定类型的处理器。 更多...

## 详细描述

助手功能。

自从
  build 243

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

## 函数说明

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 第 399 行定义.

参考 ystdex::ref().

函数调用图:
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 第 228 行定义.

参考自 ystdex::cast_array(), YSLib::ImplRet(), ystdex::make_array() , 以及 YSLib::MakeNode().

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

yconstexpr const char* const YSLib::DefaultTimeFormat | ( | "%04u-%02u-%02u %02u:%02u:%02u" |  | ) |

默认时间格式字符串。

自从
  build 307

template<VisualEvent _vID>

GEvent<typename EventTypeMapping<_vID>::HandlerType::FuncType>& YSLib::UI::FetchEvent | ( | IWidget & | wgt | ) |

inline

取部件事件。

模板参数

  _vID | 指定事件类型。

参数

  wgt | 指定部件。

异常

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

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

自从
  build 572

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

template<VisualEvent _vID>

GEvent<typename EventTypeMapping<_vID>::HandlerType::FuncType>& YSLib::UI::FetchEvent | ( | VisualEventMap & | m | ) |

取控件事件。

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

自从
  build 572

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

参考 YSLib::UI::GetEvent().

函数调用图:
template<VisualEvent _vID>

GEvent<typename EventTypeMapping<_vID>::HandlerType::FuncType>& YSLib::UI::FetchEvent | ( | AController & | controller | ) |

取部件事件。

模板参数

  _vID | 指定事件类型。

参数

  controller | 指定部件的控制器。

异常

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

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

自从
  build 572

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

template<class _tShell >

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

inline

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

自从
  build 205

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

参考 platform::Deref().

函数调用图:
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().

函数调用图:

这是这个函数的调用关系图:
template<typename _type , typename... _tParams>

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

inline

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

参考 CHRLib::args , 以及 ystdex::hash_combine_seq().

函数调用图:

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

取部件位置。

自从
  build 569

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

取部件大小。

自从
  build 569

template<typename _type , typename... _tParams>

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

related

创建 any 对象。

参见
  WG21 P0032R3 。

自从
  build 717

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

参考 CHRLib::args , 以及 yforward.

template<class _tCon , typename _tIter >

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

inline

构造指定类型的容器。

自从
  build 532

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

template<class _tCon , typename _tRange >

_tCon ystdex::make_container | ( | _tRange && | c | ) |

inline

注解
  使用 ADL `begin` 和 `end` 指定范围迭代器。

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

参考 ystdex::cpp2011::begin(), CHRLib::c, ystdex::cpp2011::end() , 以及 yforward.

函数调用图:
template<class _tCon , typename _tRange , typename _func >

_tCon ystdex::make_container | ( | _tRange && | c,
|  | _func | f
| ) |  |

inline

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

参考 ystdex::cpp2011::begin(), CHRLib::c , 以及 ystdex::cpp2011::end().

函数调用图:
template<typename _fHandler , typename _fCallable >

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

related

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

自从
  build 448

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

参考 yforward.

template<typename _tIter1 , typename _tIter2 >

auto ystdex::make_move_iterator_pair | ( | _tIter1 | it1,
|  | _tIter2 | it2
| ) |  | -> decltype( std::make_pair(std::make_move_iterator(it1), std::make_move_iterator(it2)))

inline

构造转移迭代器对。

自从
  build 337

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

参考自 ystdex::make_move_iterator_pair().

这是这个函数的调用关系图:
template<typename _tRange >

auto ystdex::make_move_iterator_pair | ( | _tRange & | c | ) | -> decltype(ystdex::make_move_iterator_pair(c.begin(), c.end()))

inline

构造指定序列范围（包含序列容器及内建数组等）的转移迭代器对。

注解
  使用 ADL `begin` 和 `end` 指定范围迭代器。

Bug:
  decltype 指定的返回类型不能使用 ADL 。
  自从
    build 337

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

参考 ystdex::cpp2011::begin(), CHRLib::c, ystdex::cpp2011::end() , 以及 ystdex::make_move_iterator_pair().

函数调用图:
template<typename _type , typename... _tParams>

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

创建 optional 对象。

参见
  WG21 P0032R3 。

自从
  build 717

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

参考 CHRLib::args, ystdex::in_place , 以及 yforward.

template<typename _type , typename _fUpdater >

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

related

创建原型迭代器。

自从
  build 522

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

参考 CHRLib::f() , 以及 YSLib::i.

函数调用图:
template<typename _tIter >

std::reverse_iterator<_tIter> ystdex::make_reverse_iterator | ( | _tIter | i | ) |

构造反向迭代器。

参见
  WG21 N3936 24.5.1.3.21[reverse.iter.make] 。
  http://wg21.cmeerw.net/lwg/issue2285 。

自从
  build 531

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

参考 YSLib::i.

参考自 YSLib::UI::TreeList::GetNodePath(), ystdex::read_uint_le() , 以及 ystdex::write_uint_le().

这是这个函数的调用关系图:
template<typename _type , typename _tValue >

std::shared_ptr<_type> ystdex::make_shared | ( | std::initializer_list< _tValue > | il | ) |

inline

使用指定类型的初始化列表构造指定类型的 std::shared_ptr 对象。

模板参数

  _type | 被指向类型。
  _tValue | 初始化列表的元素类型。

自从
  build 529

在文件 memory.hpp 第 945 行定义.

参考自 YSLib::UI::ActAfter(), ystdex::pack_shared_task(), ystdex::share_copy(), ystdex::share_forward() , 以及 ystdex::share_move().

这是这个函数的调用关系图:
template<typename _tIter , typename _fTrans >

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

related

创建变换迭代器。

自从
  build 529

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

参考 CHRLib::f(), YSLib::i , 以及 yforward.

函数调用图:
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 第 1132 行定义.

参考 YSLib::i, YSLib::Drawing::w , 以及 yforward.

template<typename _type , typename... _tParams>

enable_if_t<!is_array<_type>::value, std::unique_ptr<_type> > ystdex::cpp2014::make_unique | ( | _tParams &&... | args | ) |

inline

使用 new 和指定参数构造指定类型的 std::unique_ptr 对象。

模板参数

  _type | 被指向类型。

注解
  使用值初始化。

参见
  http://herbsutter.com/gotw/_102/ 。
  WG21 N3656 。
  WG21 N3797 20.7.2[memory.syn] 。

自从
  build 476

在文件 memory.hpp 第 852 行定义.

参考 yforward.

参考自 platform::ugetcwd().

这是这个函数的调用关系图:
template<typename _type , typename... _tParams>

enable_if_t<is_array<_type>::value && extent<_type>::value == 0, std::unique_ptr<_type> > ystdex::cpp2014::make_unique | ( | size_t | size | ) |

inline

在文件 memory.hpp 第 859 行定义.

参考 ystdex::size().

函数调用图:
template<typename _type , typename... _tParams>

enable_if_t<extent<_type>::value != 0> ystdex::cpp2014::make_unique | ( | _tParams && | ... | ) |

delete

template<typename _type , typename _tValue >

std::unique_ptr<_type> ystdex::make_unique | ( | std::initializer_list< _tValue > | il | ) |

inline

使用指定类型的初始化列表构造指定类型的 std::unique_ptr 对象。

模板参数

  _type | 被指向类型。
  _tValue | 初始化列表的元素类型。

自从
  build 574

在文件 memory.hpp 第 903 行定义.

template<typename _type >

std::weak_ptr<_type> ystdex::make_weak | ( | const std::shared_ptr< _type > & | p | ) |

inline

使用指定的 std::shared_ptr 实例的对象创建对应的 std::weak_ptr 实例的对象。

自从
  build 779

在文件 memory.hpp 第 956 行定义.

参考 CHRLib::p().

函数调用图:

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

related

创建控制台对象。

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

注解
  不抛出 Win32Exception 。

自从
  build 593

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

inline

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

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

inline

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

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

inline

取部件的容器指针。

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

自从
  build 672

取焦点对象指针。

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

自从
  build 672

YSLib::PDefH | ( | bool | ,
|  | IsNowShell | ,
|  | const shared_ptr< Shell > & | hShl
| ) |  |

inline

判断句柄指定的 Shell 是否为当前线程空间中运行的 Shell 。

自从
  早于 build 132

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

inline

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

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

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

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

警告
  不保证线程安全性。

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))))

替换关联容器的值。

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

自从
  build 531

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

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

参考 ystdex::cpp2011::end(), CHRLib::f() , 以及 YSLib::i.

函数调用图:

const char * YSLib::TranslateTime | ( | const std::tm & | tm,
|  | const char * | format = `DefaultTimeFormat`
| ) |  |

格式化时间字符串。

警告
  非线程安全。

自从
  build 307

在文件 ShellHelper.cpp 第 84 行定义.

参考 YSLib::Text::str.

参考自 YSLib::TranslateTime().

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

const char * YSLib::TranslateTime | ( | const std::time_t & | t,
|  | const char * | format = `DefaultTimeFormat`
| ) |  |

自从
  build 563

在文件 ShellHelper.cpp 第 94 行定义.

参考 CHRLib::p(), YSLib::TranslateTime() , 以及 YB_UNLIKELY.

函数调用图:

## 变量说明

in_place_tag ystdex::in_place(size_t_< _vIdx >)

inline

原地标记函数。

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

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

参考自 ystdex::make_optional() , 以及 ystdex::make_optional_inplace().