Add interval template

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman 2023-03-06 16:07:50 +01:00
parent be8cffc109
commit fbc2afb450

55
include/stdex/interval.h Normal file
View File

@ -0,0 +1,55 @@
/*
SPDX-License-Identifier: MIT
Copyright © 2023 Amebis
*/
#pragma once
#include "sal.h"
namespace stdex
{
///
/// Numerical interval
///
template <class T>
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; }
};
}