12#ifndef __cxz_pos_type_h__
13#define __cxz_pos_type_h__
24 constexpr SPos() =
default;
45 constexpr decltype(
auto)
extend(
const PosT& a)
const;
48 constexpr decltype(
auto)
operator<<(
const PosT& a)
const;
50 explicit constexpr operator UPos()
const;
51 explicit constexpr operator SizeT()
const;
83 constexpr decltype(
auto)
extend(
const PosT& a)
const;
86 constexpr decltype(
auto)
operator<<(
const PosT& a)
const;
88 explicit constexpr operator SizeT()
const;
95 const SizeT* mMap =
nullptr;
105 template <
class PosT1>
108 template <
class PosT1>
111 template <
class PosT>
114 template <
class PosT>
115 constexpr decltype(
auto)
extend(
const PosT& a)
const;
117 template <
class PosT>
118 constexpr decltype(
auto)
operator<<(
const PosT& a)
const;
120 explicit constexpr operator SizeT()
const;
127 static Arr<
SizeT,
sizeof...(Ms)> sMs;
145 template <
class PosT>
146 constexpr decltype(
auto)
extend(
const PosT& a)
const;
148 template <
class PosT>
149 constexpr decltype(
auto)
operator<<(
const PosT& a)
const;
151 explicit constexpr operator FPos()
const;
153 explicit constexpr operator SizeT()
const;
156 template <
class BPosT,
class NPosT>
166 template <
typename...
Args>
169 template <
typename...
Args>
175 template <
class PosT>
176 constexpr auto operator+(
const PosT& a)
const;
178 template <
class PosT>
179 constexpr auto operator*(
const PosT& a)
const;
182 template <
class PosT>
183 constexpr auto operator()(
const PosT& a)
const;
185 template <
class PosT>
186 constexpr decltype(
auto)
extend(
const PosT& a)
const;
188 template <
class PosT>
189 constexpr decltype(
auto)
operator<<(
const PosT& a)
const;
201 template <
class PosT>
202 inline explicit DPos(
const PosT& a);
204 template <
class PosT>
205 inline explicit DPos(PosT&& a);
214 template <
class PosT>
217 template <
class PosT>
221 template <
class PosT>
224 template <
class PosT>
225 inline decltype(
auto)
extend(
const PosT& a)
const;
227 template <
class PosT>
228 inline decltype(
auto)
operator<<(
const PosT& a)
const;
230 explicit inline operator SizeT()
const;
250 template <
class PosT>
253 template <
class PosT>
257 template <
class PosT>
260 template <
class PosT>
261 inline decltype(
auto)
extend(
const PosT& a)
const;
263 template <
class PosT>
264 inline decltype(
auto)
operator<<(
const PosT& a)
const;
266 explicit inline operator SizeT()
const;
273 template <
class BPosT,
class...
OPosTs>
280 constexpr decltype(
auto) ival(std::index_sequence<Is...>
is)
const;
283 constexpr decltype(
auto) inext(std::index_sequence<Is...>
is)
const;
291 template <
class PosT>
292 constexpr decltype(
auto)
operator+(
const PosT& a)
const;
294 template <
class PosT>
295 constexpr decltype(
auto)
operator*(
const PosT& a)
const;
297 template <
class PosT>
298 constexpr decltype(
auto)
operator()(
const PosT& a)
const;
300 constexpr decltype(
auto)
val()
const;
301 constexpr decltype(
auto)
next()
const;
303 constexpr decltype(
auto)
scal()
const;
306 constexpr decltype(
auto)
get()
const;
325 template <
class PosT>
331 template <
class PosT>
341 static constexpr bool eval();
344 static constexpr bool value = eval();
357 static constexpr bool eval();
360 static constexpr bool value = eval();
365 template <
class BPosT,
class OPosT, SizeT N>
368 static decltype(
auto)
mk(
const BPosT& a,
const OPosT&
b);
371 template <
class BPosT,
class NPosT,
class OPosT,
class ONPosT, SizeT N>
377 template <SizeT N,
class BPosT,
class OPosT>
381 decltype(
auto)
mkiEPos(
const BPosT& a,
const OPosT&
b, std::index_sequence<Is...>
is);
417 template <
class BPosT,
class NPosT>
423 template <
class BPosT,
class...
OPosTs>
429 template <
class BPosT,
class NPosT>
435 template <
class BPosT,
class...
OPosTs>
441 template <
class BPosT,
class NPosT>
const VPosBase * vpos() const
const VPosBase * get() const
DPos operator()(const PosT &a) const
decltype(auto) extend(const PosT &a) const
DPos operator+(const PosT &a) const
DPos operator*(const PosT &a) const
DPosRef(const VPosBase *p)
DPos(Uptr< VPosBase > &&a)
DPos operator+(const PosT &a) const
const VPosBase * get() const
DPos operator()(const PosT &a) const
const VPosBase * vpos() const
decltype(auto) extend(const PosT &a) const
constexpr decltype(auto) scal() const
constexpr decltype(auto) val() const
constexpr decltype(auto) next() const
constexpr decltype(auto) get() const
constexpr EPos(const BPosT &b, const OPosTs &... os)
FPos(SizeT ext, const SizeT *map)
constexpr FPos operator*(const PosT1 &a) const
constexpr const SizeT & val() const
constexpr UPos operator()(const PosT &a) const
constexpr UPos operator+(const PosT1 &a) const
constexpr decltype(auto) extend(const PosT &a) const
constexpr SizeT size() const
constexpr decltype(auto) extend(const PosT &a) const
constexpr const NPosT & next() const
constexpr auto operator()(const PosT &a) const
constexpr auto operator+(const PosT &a) const
constexpr SizeT size() const
constexpr auto operator*(const PosT &a) const
constexpr SFPos()=default
constexpr decltype(auto) extend(const PosT &a) const
constexpr SizeT val() const
constexpr auto operator*(const SPos< N1 > &a) const
constexpr SizeT size() const
constexpr auto operator+(const SPos< N1 > &a) const
constexpr auto operator()(const SPos< N1 > &a) const
constexpr auto operator*(const SPos< N1 > &a) const
constexpr SizeT val() const
constexpr SizeT size() const
constexpr auto operator+(const SPos< N1 > &a) const
constexpr auto operator-(const SPos< N1 > &a) const
constexpr SPos(SPos &&a)=default
constexpr auto operator()(const SPos< N1 > &a) const
constexpr SPos(const SPos &a)=default
constexpr decltype(auto) extend(const PosT &a) const
constexpr UPos(SizeT ext)
constexpr UPos operator+(const PosT &a) const
constexpr SPos< 0 > operator()(const SPos< 0 > &a) const
constexpr SPos< 0 > operator*(const SPos< 0 > &a) const
constexpr SizeT size() const
constexpr const SizeT & val() const
constexpr decltype(auto) extend(const PosT &a) const
constexpr UPos operator-(const PosT &a) const
decltype(auto) mkiEPos(const BPosT &a, const OPosT &b, std::index_sequence< Is... > is)
decltype(auto) mkEPos(const BPosT &a, const OPosT &b)
std::unique_ptr< T > Uptr
Sptr< Range > rangeCast(const RangePtr r)
static decltype(auto) mk(const BPosT &a, const OPosT &b)
static constexpr SizeT value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr SizeT value