1#ifndef TATOOINE_LINSPACE_H
2#define TATOOINE_LINSPACE_H
15template <
floating_po
int Real>
18template <
floating_po
int Real>
25template <
floating_po
int Real>
49 std::size_t
const size) noexcept
50 :
m_min{std::min(
static_cast<Real
>(
min),
static_cast<Real
>(
max))},
51 m_max{std::max(
static_cast<Real
>(
min),
static_cast<Real
>(
max))},
59 :
m_min{
static_cast<Real
>(other.front())},
60 m_max{
static_cast<Real
>(other.back())},
67 constexpr auto operator=(
linspace<OtherReal> const& other) noexcept -> auto& {
68 m_min = other.front();
79 constexpr auto at(std::size_t i)
const -> Real {
86 constexpr auto operator[](std::size_t
const i)
const {
return at(i); }
125template <
floating_po
int Real>
130template <
floating_po
int Real>
135template <
floating_po
int Real>
140template <
floating_po
int Real>
147template <arithmetic Real0, arithmetic Real1>
148linspace(Real0
const, Real1
const, std::size_t
const)
156template <
typename Real>
164template <
floating_po
int Real>
166 out <<
"[" << l[0] <<
", " << l[1] <<
", ..., " << l.back() <<
"]";
184template <
floating_po
int Real>
189template <
floating_po
int Real>
232 return other.m_i -
m_i;
238 constexpr auto advance(std::ptrdiff_t
const off) {
m_i += off; }
241template <
floating_po
int Real>
C++20 implementation of an iterator facade.
Definition: iterator_facade.h:154
Definition: concepts.h:33
Definition: concepts.h:30
Definition: linspace.h:13
auto prev(iterator_sentinel< Real >const &sent)
Definition: linspace.h:242
Definition: linspace.h:172
Definition: algorithm.h:6
auto operator<<(std::ostream &out, linspace< Real > const &l) -> auto &
Definition: linspace.h:165
static constexpr auto is_linspace
Definition: linspace.h:160
constexpr auto max(A &&a, B &&b)
Definition: math.h:20
constexpr auto min(A &&a, B &&b)
Definition: math.h:15
auto back(linspace< Real > const &l)
Definition: linspace.h:136
auto front(linspace< Real > const &l)
Definition: linspace.h:126
Definition: linspace.h:185
tatooine::linspace< Real > const * m_lin
Definition: linspace.h:186
Definition: linspace.h:190
constexpr auto increment(std::size_t inc=1)
Definition: linspace.h:228
constexpr iterator(iterator const &)=default
constexpr auto dereference() const
Definition: linspace.h:227
linspace_type const * m_lin
Definition: linspace.h:202
constexpr iterator(linspace_type const *const _lin, std::size_t _i)
Definition: linspace.h:211
constexpr auto distance_to(iterator const &other) const -> std::ptrdiff_t
Definition: linspace.h:231
constexpr auto at_end() const
Definition: linspace.h:230
constexpr auto equal(iterator const &other) const
Definition: linspace.h:226
constexpr auto advance(std::ptrdiff_t const off)
Definition: linspace.h:238
constexpr iterator(iterator &&) noexcept=default
constexpr auto distance_to(sentinel_type const) const -> std::ptrdiff_t
Definition: linspace.h:234
constexpr iterator()=default
std::size_t m_i
Definition: linspace.h:203
constexpr auto decrement(std::size_t dec=1)
Definition: linspace.h:229
Definition: linspace.h:154
Definition: linspace.h:26
real_type value_type
Definition: linspace.h:32
constexpr linspace(linspace &&) noexcept=default
constexpr linspace(linspace const &)=default
Real real_type
Definition: linspace.h:31
constexpr auto front() -> auto &
Definition: linspace.h:94
constexpr auto operator[](std::size_t const i) const
Definition: linspace.h:86
constexpr auto end() const
Definition: linspace.h:89
constexpr auto at(std::size_t i) const -> Real
Definition: linspace.h:79
constexpr linspace() noexcept
Definition: linspace.h:46
constexpr auto spacing() const
Definition: linspace.h:98
Real m_max
Definition: linspace.h:39
Real m_min
Definition: linspace.h:39
constexpr auto operator=(linspace const &) -> linspace &=default
constexpr linspace(arithmetic auto const min, arithmetic auto const max, std::size_t const size) noexcept
Definition: linspace.h:48
constexpr auto push_back()
Definition: linspace.h:102
constexpr auto back() const
Definition: linspace.h:95
constexpr auto size() -> auto &
Definition: linspace.h:92
constexpr auto pop_front()
Definition: linspace.h:117
constexpr auto resize(std::size_t const s)
Definition: linspace.h:122
constexpr auto operator=(linspace &&) noexcept -> linspace &=default
constexpr auto size() const
Definition: linspace.h:91
std::size_t m_size
Definition: linspace.h:40
constexpr auto pop_back()
Definition: linspace.h:107
constexpr auto begin() const
Definition: linspace.h:88
constexpr auto front() const
Definition: linspace.h:93
constexpr auto back() -> auto &
Definition: linspace.h:96
constexpr auto push_front()
Definition: linspace.h:112