1#ifndef TATOOINE_HANDLE_H
2#define TATOOINE_HANDLE_H
13template <
typename Child,
unsigned_
integral Int = std::
size_t>
16 static constexpr auto invalid_idx = std::numeric_limits<Int>::max();
36 constexpr auto operator<=>(
handle<Child, Int> const& other) const = default;
38 constexpr auto operator++() -> auto& {
40 return *
static_cast<Child*
>(
this);
51 return *
static_cast<Child*
>(
this);
68template <
typename Child,
unsigned_
integral Int>
70 return Child{h.
index() + i};
73template <
typename Child,
unsigned_
integral Int>
75 return Child{i + h.
index()};
78template <
typename Child,
unsigned_
integral Int>
80 return Child{h.
index() - i};
83template <
typename Child,
unsigned_
integral Int>
85 return Child{i - h.
index()};
88template <
typename Child,
unsigned_
integral Int>
90 return Child{h.
index() * i};
93template <
typename Child,
unsigned_
integral Int>
95 return Child{i * h.
index()};
98template <
typename Child,
unsigned_
integral Int>
100 return Child{h.
index() / i};
103template <
typename Child,
unsigned_
integral Int>
105 return Child{i / h.
index()};
113template <
typename Child,
unsigned_
integral Int>
115 return stream << h.index();
118template <
typename Child,
unsigned_
integral Int>
Definition: concepts.h:21
Definition: algorithm.h:6
auto operator<<(std::ostream &out, linspace< Real > const &l) -> auto &
Definition: linspace.h:165
auto constexpr operator/(Lhs const &lhs, Rhs const &rhs)
component-wise division
Definition: operator_overloads.h:103
constexpr auto operator*(diag_static_tensor< TensorA, M, N > const &A, static_vec auto const &b) -> vec< common_type< tatooine::value_type< TensorA >, tatooine::value_type< decltype(b)> >, M > requires(N==decltype(b)::dimension(0))
Definition: diag_tensor.h:141
auto constexpr index(handle< Child, Int > const h)
Definition: handle.h:119
auto constexpr operator-(static_tensor auto const &t)
Definition: operator_overloads.h:31
auto constexpr operator+(static_tensor auto const &lhs, arithmetic_or_complex auto const scalar)
Definition: operator_overloads.h:35
constexpr auto operator/=(integral auto const j)
Definition: handle.h:62
constexpr handle(integral auto const _i)
Definition: handle.h:25
constexpr auto operator++(int)
Definition: handle.h:43
constexpr auto operator--(int)
Definition: handle.h:54
static constexpr auto invalid_idx
Definition: handle.h:16
constexpr auto operator+=(integral auto const j)
Definition: handle.h:59
auto constexpr is_valid() const
Definition: handle.h:65
constexpr auto operator=(handle &&) noexcept -> handle &=default
constexpr handle(handle const &)=default
auto index() const
Definition: handle.h:64
constexpr handle(handle &&) noexcept=default
constexpr auto operator*=(integral auto const j)
Definition: handle.h:61
Int int_t
Definition: handle.h:15
static constexpr auto invalid()
Definition: handle.h:18
Int i
Definition: handle.h:21
constexpr handle()
Definition: handle.h:24
constexpr auto operator--() -> auto &
Definition: handle.h:49
constexpr auto operator-=(integral auto const j)
Definition: handle.h:60