载入中...
搜索中...
未找到
DrawJaggedRandom.hpp
浏览该文件的文档.
1/*#######################################################################################
2 Copyright (c) 2017-2019 Kasugaccho
3 Copyright (c) 2018-2019 As Project
4 https://github.com/Kasugaccho/DungeonTemplateLibrary
5 wanotaitei@gmail.com
6
7 Distributed under the Boost Software License, Version 1.0. (See accompanying
8 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9#######################################################################################*/
10#ifndef INCLUDED_DUNGEON_TEMPLATE_LIBRARY_DTL_UTILITY_DRAW_JAGGED_RANDOM_HPP
11#define INCLUDED_DUNGEON_TEMPLATE_LIBRARY_DTL_UTILITY_DRAW_JAGGED_RANDOM_HPP
12
14
15#include <DTL/Macros/constexpr.hpp>
16#include <DTL/Random/RandomEngine.hpp>
17#include <DTL/Type/Forward.hpp>
18#include <DTL/Type/SizeT.hpp>
19#include <DTL/Utility/MatrixWrapper.hpp>
20
21/*#######################################################################################
22 [概要] "dtl名前空間"とは"DungeonTemplateLibrary"の全ての機能が含まれる名前空間である。
23 [Summary] The "dtl" is a namespace that contains all the functions of "DungeonTemplateLibrary".
24#######################################################################################*/
25namespace dtl {
26 inline namespace utility { //"dtl::utility"名前空間に属する
27
28 template<typename Derived, typename Matrix_Var_, typename Random_Engine_, typename Return_Var_ = bool>
30 private:
31
33
34 using Index_Size = ::dtl::type::size;
35
36
37 public:
38
40
41/*#######################################################################################
42 [概要] Matrixに描画する。
43 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
44 [Summary] Draw on Matrix.
45 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
46#######################################################################################*/
47 template<typename Matrix_, typename... Args>
48 constexpr Return_Var_ redraw(const Matrix_Var_& init_value_, Matrix_& matrix_, Args&& ... args) const noexcept {
49 return static_cast<const Derived*>(this)->redrawNormal(init_value_, ::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_RANDOM_ENGINE.get()));
50 }
51
52/*#######################################################################################
53 [概要] Matrixに描画する。
54 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
55 [Summary] Draw on Matrix.
56 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
57#######################################################################################*/
58 template<typename Matrix_, typename... Args>
59 constexpr Return_Var_ draw(Matrix_& matrix_, Args&& ... args) const noexcept {
60 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_RANDOM_ENGINE.get()));
61 }
62
63 /*#######################################################################################
64 [概要] Matrixに描画する。
65 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
66 [Summary] Draw on Matrix.
67 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
68 #######################################################################################*/
69 template<typename Matrix_, typename... Args>
70 constexpr Return_Var_ drawAdd(Matrix_& matrix_, Args&& ... args) const noexcept {
71 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_RANDOM_ENGINE.get()), 0, 0, 0, 0);
72 }
73
74 /*#######################################################################################
75 [概要] Matrixに描画する。
76 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
77 [Summary] Draw on Matrix.
78 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
79 #######################################################################################*/
80 template<typename Matrix_, typename Matrix2_, typename... Args>
81 constexpr Return_Var_ drawOther(Matrix_& matrix_, Matrix2_& matrix2_, Args&& ... args) const noexcept {
82 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_RANDOM_ENGINE.get()), ::dtl::utility::makeWrapper<Matrix_Var_>(matrix2_, DTL_TYPE_FORWARD<Args>(args)...)
83 , Matrix_Var_{}, 0, 0, 0, 0); //10*4 Copy
84 }
85
86 /*#######################################################################################
87 [概要] Matrixに描画する。
88 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
89 [Summary] Draw on Matrix.
90 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
91 #######################################################################################*/
92 template<typename Matrix_Var2_, typename Matrix_, typename Matrix2_, typename... Args>
93 constexpr Return_Var_ drawOther(Matrix_& matrix_, Matrix2_& matrix2_, Args&& ... args) const noexcept {
94 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_RANDOM_ENGINE.get()), ::dtl::utility::makeWrapper<Matrix_Var2_>(matrix2_, DTL_TYPE_FORWARD<Args>(args)...)
95 , Matrix_Var2_{}, 0, 0, 0, 0); //10*4 Copy
96 }
97
98 /*#######################################################################################
99 [概要] Matrixに描画する。
100 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
101 [Summary] Draw on Matrix.
102 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
103 #######################################################################################*/
104 template<typename Matrix_, typename Function_, typename... Args>
105 constexpr Return_Var_ drawOperator(Matrix_& matrix_, Function_&& function_, Args&& ... args) const noexcept {
106 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_RANDOM_ENGINE.get()), function_);
107 }
108
109 // See DrawJagged.hpp — upstream omits drawOperatorArray; required for Apple Clang.
110 template<typename Matrix_, typename Function_>
111 constexpr Return_Var_ drawOperatorArray(Matrix_& matrix_, const Index_Size max_x_,
112 const Index_Size max_y_, Function_&& function_) const noexcept {
113 return static_cast<const Derived*>(this)->drawNormal(
114 ::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, max_x_, max_y_),
115 Random_Engine_(DTL_RANDOM_ENGINE.get()), function_);
116 }
117
118 /*#######################################################################################
119 [概要] Matrixに描画する。
120 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
121 [Summary] Draw on Matrix.
122 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
123 #######################################################################################*/
124 template<typename Matrix_, typename Function_, typename... Args>
125 constexpr Return_Var_ drawFunction(Matrix_& matrix_, Function_&& function_, Args&& ... args) const noexcept {
126 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_RANDOM_ENGINE.get()), function_, 0, 0, 0, 0);
127 }
128
129 /*#######################################################################################
130 [概要] Matrixに描画する。
131 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
132 [Summary] Draw on Matrix.
133 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
134 #######################################################################################*/
135 template<typename Matrix_, typename Function_, typename... Args>
136 constexpr Return_Var_ drawAddOperator(Matrix_& matrix_, Function_&& function_, Args&& ... args) const noexcept {
137 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_RANDOM_ENGINE.get()), function_, 0, 0, 0);
138 }
139
140 /*#######################################################################################
141 [概要] Matrixに描画する。
142 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
143 [Summary] Draw on Matrix.
144 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
145 #######################################################################################*/
146 template<typename Matrix_>
147 constexpr Return_Var_ drawArray(Matrix_& matrix_, const Index_Size max_x_, const Index_Size max_y_) const noexcept {
148 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, max_x_, max_y_), Random_Engine_(DTL_RANDOM_ENGINE.get()));
149 }
150
151/*#######################################################################################
152 [概要] Matrixに描画する。
153 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
154 [Summary] Draw on Matrix.
155 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
156#######################################################################################*/
157 template<typename Matrix_, typename SEED_, typename... Args>
158 constexpr Return_Var_ drawSEED(Matrix_& matrix_, SEED_&& seed_, Args&& ... args) const noexcept {
159 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_TYPE_FORWARD<SEED_>(seed_)));
160 }
161
162 /*#######################################################################################
163 [概要] Matrixに描画する。
164 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
165 [Summary] Draw on Matrix.
166 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
167 #######################################################################################*/
168 template<typename Matrix_, typename SEED_, typename... Args>
169 constexpr Return_Var_ drawAddSEED(Matrix_& matrix_, SEED_&& seed_, Args&& ... args) const noexcept {
170 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), Random_Engine_(DTL_TYPE_FORWARD<SEED_>(seed_)), 0, 0, 0, 0);
171 }
172
173/*#######################################################################################
174 [概要] Matrixに描画する。
175 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
176 [Summary] Draw on Matrix.
177 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
178#######################################################################################*/
179 template<typename Matrix_, typename... Args>
180 constexpr Return_Var_ drawRandomEngine(Matrix_& matrix_, Random_Engine_&& seed_, Args&& ... args) const noexcept {
181 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), DTL_TYPE_FORWARD<Random_Engine_>(seed_));
182 }
183
184 /*#######################################################################################
185 [概要] Matrixに描画する。
186 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
187 [Summary] Draw on Matrix.
188 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
189 #######################################################################################*/
190 template<typename Matrix_, typename... Args>
191 constexpr Return_Var_ drawAddRandomEngine(Matrix_& matrix_, Random_Engine_&& seed_, Args&& ... args) const noexcept {
192 return static_cast<const Derived*>(this)->drawNormal(::dtl::utility::makeWrapper<Matrix_Var_>(matrix_, DTL_TYPE_FORWARD<Args>(args)...), DTL_TYPE_FORWARD<Random_Engine_>(seed_), 0, 0, 0, 0);
193 }
194
196
197/*#######################################################################################
198 [概要] Matrixに描画する。
199 [戻り値] 戻り値の型は bool である。[ true : 描画に成功したことを示す / false : 描画に失敗したことを示す ]
200 [Summary] Draw on Matrix.
201 [Return value] The return type is bool. [ true: Drawing was successful. / false: Drawing failed. ]
202#######################################################################################*/
203 template<typename Matrix_, typename ...Args_>
204 constexpr Return_Var_ operator()(Matrix_& matrix_, Args_&& ... args_) const noexcept {
205 return this->draw(matrix_, DTL_TYPE_FORWARD<Args_>(args_)...);
206 }
207
208
210
211/*#######################################################################################
212 [概要] Matrixに描画する。
213 [戻り値] 戻り値の型は 引数として渡されたMatrixの型(Matrix_型) である。
214 [Summary] Draw on Matrix.
215 [Return value] The return type is Matrix type of argument.
216#######################################################################################*/
217 template<typename Matrix_, typename ...Args_>
218 DTL_VERSIONING_CPP14_CONSTEXPR
219 Matrix_&& create(Matrix_&& matrix_, Args_&& ... args_) const noexcept {
220 this->draw(matrix_, DTL_TYPE_FORWARD<Args_>(args_)...);
221 return DTL_TYPE_FORWARD<Matrix_>(matrix_);
222 }
223
224 /*#######################################################################################
225 [概要] Matrixに描画する。
226 [戻り値] 戻り値の型は 引数として渡されたMatrixの型(Matrix_型) である。
227 [Summary] Draw on Matrix.
228 [Return value] The return type is Matrix type of argument.
229 #######################################################################################*/
230 template<typename Matrix_, typename ...Args_>
231 DTL_VERSIONING_CPP14_CONSTEXPR
232 Matrix_&& createArray(Matrix_&& matrix_, Args_&& ... args_) const noexcept {
233 this->drawArray(matrix_, DTL_TYPE_FORWARD<Args_>(args_)...);
234 return DTL_TYPE_FORWARD<Matrix_>(matrix_);
235 }
236
237 /*#######################################################################################
238 [概要] Matrixに描画する。
239 [戻り値] 戻り値の型は 引数として渡されたMatrixの型(Matrix_型) である。
240 [Summary] Draw on Matrix.
241 [Return value] The return type is Matrix type of argument.
242 #######################################################################################*/
243 template<typename Matrix_, typename ...Args_>
244 DTL_VERSIONING_CPP14_CONSTEXPR
245 Matrix_&& createOperator(Matrix_&& matrix_, Args_&& ... args_) const noexcept {
246 this->drawOperator(matrix_, DTL_TYPE_FORWARD<Args_>(args_)...);
247 return DTL_TYPE_FORWARD<Matrix_>(matrix_);
248 }
249
250 /*#######################################################################################
251 [概要] Matrixに描画する。
252 [戻り値] 戻り値の型は 引数として渡されたMatrixの型(Matrix_型) である。
253 [Summary] Draw on Matrix.
254 [Return value] The return type is Matrix type of argument.
255 #######################################################################################*/
256 template<typename Matrix_, typename ...Args_>
257 DTL_VERSIONING_CPP14_CONSTEXPR
258 Matrix_&& createOperatorArray(Matrix_&& matrix_, Args_&& ... args_) const noexcept {
259 this->drawOperatorArray(matrix_, DTL_TYPE_FORWARD<Args_>(args_)...);
260 return DTL_TYPE_FORWARD<Matrix_>(matrix_);
261 }
262 };
263 }
264}
265
266#endif //Included Dungeon Template Library
constexpr Return_Var_ operator()(Matrix_ &matrix_, Args_ &&... args_) const noexcept
constexpr Return_Var_ drawOperator(Matrix_ &matrix_, Function_ &&function_, Args &&... args) const noexcept
constexpr Return_Var_ drawAddRandomEngine(Matrix_ &matrix_, Random_Engine_ &&seed_, Args &&... args) const noexcept
constexpr Return_Var_ draw(Matrix_ &matrix_, Args &&... args) const noexcept
constexpr Return_Var_ drawFunction(Matrix_ &matrix_, Function_ &&function_, Args &&... args) const noexcept
DTL_VERSIONING_CPP14_CONSTEXPR Matrix_ && createArray(Matrix_ &&matrix_, Args_ &&... args_) const noexcept
constexpr Return_Var_ drawOther(Matrix_ &matrix_, Matrix2_ &matrix2_, Args &&... args) const noexcept
constexpr Return_Var_ drawOther(Matrix_ &matrix_, Matrix2_ &matrix2_, Args &&... args) const noexcept
constexpr Return_Var_ drawSEED(Matrix_ &matrix_, SEED_ &&seed_, Args &&... args) const noexcept
constexpr Return_Var_ drawAdd(Matrix_ &matrix_, Args &&... args) const noexcept
constexpr Return_Var_ drawAddSEED(Matrix_ &matrix_, SEED_ &&seed_, Args &&... args) const noexcept
constexpr Return_Var_ redraw(const Matrix_Var_ &init_value_, Matrix_ &matrix_, Args &&... args) const noexcept
constexpr Return_Var_ drawRandomEngine(Matrix_ &matrix_, Random_Engine_ &&seed_, Args &&... args) const noexcept
DTL_VERSIONING_CPP14_CONSTEXPR Matrix_ && createOperator(Matrix_ &&matrix_, Args_ &&... args_) const noexcept
constexpr Return_Var_ drawAddOperator(Matrix_ &matrix_, Function_ &&function_, Args &&... args) const noexcept
constexpr Return_Var_ drawOperatorArray(Matrix_ &matrix_, const Index_Size max_x_, const Index_Size max_y_, Function_ &&function_) const noexcept
DTL_VERSIONING_CPP14_CONSTEXPR Matrix_ && create(Matrix_ &&matrix_, Args_ &&... args_) const noexcept
constexpr Return_Var_ drawArray(Matrix_ &matrix_, const Index_Size max_x_, const Index_Size max_y_) const noexcept
DTL_VERSIONING_CPP14_CONSTEXPR Matrix_ && createOperatorArray(Matrix_ &&matrix_, Args_ &&... args_) const noexcept