stdex
Additional custom or not Standard C++ covered algorithms
Loading...
Searching...
No Matches
interval.hpp
1/*
2 SPDX-License-Identifier: MIT
3 Copyright © 2023 Amebis
4*/
5
6#pragma once
7
8#include "sal.hpp"
9#include <vector>
10
11namespace stdex
12{
16 template <class T>
17 struct interval
18 {
20 T end;
21
25 inline interval() noexcept : start(1), end(0) {}
26
32 inline interval(_In_ T x) noexcept : start(x), end(x) {}
33
40 inline interval(_In_ T _start, _In_ T _end) noexcept : start(_start), end(_end) {}
41
47 inline T size() const { return start <= end ? end - start : 0; }
48
54 inline bool empty() const { return start >= end; }
55
61 inline operator bool() const { return start <= end; }
62
70 inline bool operator==(const interval& other) const { return start == other.start && end == other.end; }
71
79 inline bool operator!=(const interval& other) const { return !operator==(other); }
80 };
81
82 template <class T, class _Alloc = std::allocator<interval<T>>>
83 using interval_vector = std::vector<interval<T>, _Alloc>;
84}
Numerical interval.
Definition interval.hpp:18
interval(T x) noexcept
Constructs a zero-size interval.
Definition interval.hpp:32
bool empty() const
Is interval empty?
Definition interval.hpp:54
interval(T _start, T _end) noexcept
Constructs an interval.
Definition interval.hpp:40
T size() const
Returns interval size.
Definition interval.hpp:47
T end
interval end
Definition interval.hpp:20
interval() noexcept
Constructs an invalid interval.
Definition interval.hpp:25
bool operator!=(const interval &other) const
Are intervals different?
Definition interval.hpp:79
T start
interval start
Definition interval.hpp:19
bool operator==(const interval &other) const
Are intervals identical?
Definition interval.hpp:70