YSTest: array.hpp 源文件

YSTest PreAlpha_b700_20160611 The YSLib Test Project

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

- 文件列表
- 文件成员

array.hpp
浏览该文件的文档.
1 /*
2 © 2012-2014 FrankHB.
3
4 This file is part of the YSLib project, and may only be used,
5 modified, and distributed under the terms of the YSLib project
6 license, LICENSE.TXT. By continuing to use, modify, or distribute
7 this file you indicate that you have read the license and
8 understand and accept it fully.
9 */
10
28 #ifndef YB_INC_ystdex_array_hpp_
29 #define YB_INC_ystdex_array_hpp_ 1
30
31 #include "utility.hpp" // for yforward, common_nonvoid_t, decay_copy,
32 #include <array> // for std::array;
33 #include <algorithm> // for std::copy_n;
34 #include <memory> // for std::addressof;
35 #include <iterator> // for std::make_move_iterator;
36
37 namespace ystdex
38 {
39
50 template<typename _type = void, typename... _tParams>
51 using common_array_t = std::array<common_nonvoid_t<_type, decay_t<_tParams>...>,
52 sizeof...(_tParams)>;
53
54
56 template<typename _type = void, typename... _tParams>
57 yconstfn common_array_t<_type, _tParams...>
58 cast_array(_tParams&&... args)
59 {
60 return {{decay_copy(common_nonvoid_t<_type, _tParams...>(args))...}};
61 }
62
64 template<typename _type = void, typename... _tParams>
65 yconstfn common_array_t<_type, _tParams...>
66 forward_as_array(_tParams&&... args)
67 {
68 return {{yforward(args)...}};
69 }
70
72 template<typename _type = void, typename... _tParams>
73 yconstfn common_array_t<_type, _tParams...>
74 make_array(_tParams&&... args)
75 {
76 return {{decay_copy(args)...}};
77 }
79
85 template<typename _type, size_t _vN, typename _tSrc>
86 yconstfn std::array<_type, _vN>
87 to_array(const _tSrc& src)
88 {
89 return std::array<_type, _vN>(src);
90 }
91 template<typename _type, size_t _vN>
92 yconstfn std::array<_type, _vN>
93 to_array(const std::array<_type, _vN>& src)
94 {
95 return src;
96 }
97 template<typename _type, size_t _vN, typename _tSrcElement>
98 inline std::array<_type, _vN>
99 to_array(const _tSrcElement(&src)[_vN])
100 {
101 std::array<_type, _vN> arr;
102
103 std::copy_n(std::addressof(src[0]), _vN, std::addressof(arr[0]));
104 return arr;
105 }
106 template<typename _type, size_t _vN, typename _tSrcElement>
107 inline std::array<_type, _vN>
108 to_array(_tSrcElement(&&src)[_vN])
109 {
110 std::array<_type, _vN> arr;
111
112 std::copy_n(std::make_move_iterator(std::addressof(src[0])), _vN,
113 std::addressof(arr[0]));
114 return arr;
115 }
117 template<typename _type, size_t _vN, typename _tSrcElement>
118 inline std::array<_type, _vN>
119 to_array(std::initializer_list<_tSrcElement> il)
120 {
121 std::array<_type, il.size()> arr;
122
123 std::copy_n(std::make_move_iterator(il.begin()),
124 std::min(_vN, il.size()), std::addressof(arr[0]));
125 return arr;
126 }
128
129 } // namespace ystdex;
130
131 #endif
132
ystdex::common_nonvoid_t
_t< cond_t< is_void< _type >, vdefer< common_type_t, _types... >, identity< _type >>> common_nonvoid_t
取公共非空类型：若第一参数为非空类型则为第一参数，否则从其余参数推断。
Definition: type_op.hpp:290
utility.hpp
实用设施。
ystdex::decay_copy
enable_if_convertible_t< _type, decay_t< _type >, decay_t< _type > > decay_copy(_type &&arg)
退化复制。
Definition: utility.hpp:108
ystdex::cast_array
common_array_t< _type, _tParams... > cast_array(_tParams &&...args)
构造指定参数转换初始化的 std::array 对象。
Definition: array.hpp:58
ystdex::forward_as_array
common_array_t< _type, _tParams... > forward_as_array(_tParams &&...args)
转移指定参数至 std::array 对象。
Definition: array.hpp:66
ystdex::common_array_t
std::array< common_nonvoid_t< _type, decay_t< _tParams >... >, sizeof...(_tParams)> common_array_t
取指定类型和参数类型推断的 std::array 实例。
Definition: array.hpp:52
ystdex
特性测试宏。
Definition: ydef.h:796
yconstfn
#define yconstfn
指定编译时常量函数。
Definition: ydef.h:654
yforward
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
Definition: ydef.h:969
ystdex::min
const _type & min(const _type &a, const _type &b, _fComp comp=less< _type >())
取较小的元素。
Definition: algorithm.hpp:521
CHRLib::args
_tParams && args
Definition: CharacterProcessing.h:538
ystdex::to_array
std::array< _type, _vN > to_array(const _tSrc &src)
转换指定参数为 std::array 对象。
Definition: array.hpp:87
ystdex::make_array
common_array_t< _type, _tParams... > make_array(_tParams &&...args)
构造指定参数初始化的 std::array 对象。
Definition: array.hpp:74