From fbc2afb450d62cff03d52f4075f52ea5e79527a8 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Mon, 6 Mar 2023 16:07:50 +0100 Subject: [PATCH] Add interval template Signed-off-by: Simon Rozman --- include/stdex/interval.h | 55 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 include/stdex/interval.h diff --git a/include/stdex/interval.h b/include/stdex/interval.h new file mode 100644 index 000000000..5ef0d8734 --- /dev/null +++ b/include/stdex/interval.h @@ -0,0 +1,55 @@ +/* + SPDX-License-Identifier: MIT + Copyright © 2023 Amebis +*/ + +#pragma once + +#include "sal.h" + +namespace stdex +{ + /// + /// Numerical interval + /// + template + struct interval + { + T start; ///< interval start + T end; ///< interval end + + /// + /// Constructs an invalid interval + /// + inline interval() noexcept : start(1), end(0) {} + + /// + /// Constructs a zero-size interval + /// + /// \param[in] x Interval start and end value + /// + inline interval(_In_ T x) noexcept : start(x), end(x) {} + + /// + /// Constructs an interval + /// + /// \param[in] _start Interval start value + /// \param[in] _end Interval end value + /// + inline interval(_In_ T _start, _In_ T _end) noexcept : start(_start), end(_end) {} + + /// + /// Returns interval size + /// + /// \returns Interval size or 0 if interval is invalid + /// + inline T size() const { return start <= end ? end - start : 0; } + + /// + /// Is interval valid? + /// + /// \returns true if interval is valid or false otherwise + /// + inline operator bool() const { return start <= end; } + }; +}