1 #pragma once // Source encoding: UTF-8 with BOM (π is a lowercase Greek "pi"). 5 #include <c/assert.hpp> 9 template<
class Integer >
27 friend auto operator==(
const Iterator& a,
const Iterator& b ) noexcept
29 {
return a.m_current == b.m_current; }
31 explicit Iterator(
const Integer value ) noexcept
37 constexpr
auto lower() const noexcept -> Integer {
return m_lower; }
38 constexpr
auto upper() const noexcept -> Integer {
return m_upper; }
40 constexpr
auto size() const noexcept -> Integer {
return 1 + m_upper - m_lower; }
42 constexpr
auto contains(
const Integer x )
const noexcept
44 {
return m_lower <= x and x <= m_upper; }
46 auto begin() const noexcept -> Iterator {
return Iterator( m_lower ); }
47 auto end() const noexcept -> Iterator {
return Iterator( m_upper + 1 ); }
57 template<
class Integer >
60 template<
class Integer =
int >
61 inline constexpr
auto up_to(
const Integer n ) noexcept
65 template<
class Integer >
68 {
return range.contains( v ); }
A drop-in replacement for bool without implicit conversion from/to types other than bool.
constexpr auto lower() const noexcept -> Integer
auto operator *(const int n, const string_view &s) -> string
constexpr Range_(const Integer lower, const Integer upper) noexcept
void advance(P_< const char > &p, const Size distance)
auto begin() const noexcept -> Iterator
auto is_in(const basic_string_view< Char > &sv, const Char ch) noexcept -> Truth
Truth is a drop-in replacement for bool without implicit conversion from/to types other than bool.
constexpr auto contains(const Integer x) const noexcept -> Truth
constexpr auto size() const noexcept -> Integer
constexpr auto up_to(const Integer n) noexcept -> Range_< Integer >
auto end() const noexcept -> Iterator
void reversed(const Range_< Integer > &)=delete
constexpr auto upper() const noexcept -> Integer