sources/range.h

changeset 185
e83ec58cc458
parent 184
afd63357a03d
child 186
9330b93d9946
--- a/sources/range.h	Wed Jan 27 14:06:45 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-/*
-	Copyright 2014 - 2016 Teemu Piippo
-	All rights reserved.
-
-	Redistribution and use in source and binary forms, with or without
-	modification, are permitted provided that the following conditions
-	are met:
-
-	1. Redistributions of source code must retain the above copyright
-	   notice, this list of conditions and the following disclaimer.
-	2. Redistributions in binary form must reproduce the above copyright
-	   notice, this list of conditions and the following disclaimer in the
-	   documentation and/or other materials provided with the distribution.
-	3. Neither the name of the copyright holder nor the names of its
-	   contributors may be used to endorse or promote products derived from
-	   this software without specific prior written permission.
-
-	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-	"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-	TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-	PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
-	OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-	EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-	PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-	PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-	LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-	NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#pragma once
-#include <algorithm>
-#include <memory>
-#include "basics.h"
-BEGIN_ZFC_NAMESPACE
-
-//
-// -------------------------------------------------------------------------------------------------
-//
-
-template<typename T>
-class Range
-{
-	T m_a;
-	T m_b;
-	T m_step;
-
-public:
-	struct Iterator
-	{
-		T value;
-		T step;
-
-		Iterator (T value, T step) :
-			value (value),
-			step (step) {}
-
-		T& operator*()
-		{
-			return value;
-		}
-
-		bool operator== (const Iterator& other) const
-		{
-			return value == other.value;
-		}
-
-		bool operator!= (const Iterator& other) const
-		{
-			return value < other.value;
-		}
-
-		Iterator& operator++()
-		{
-			value += step; return *this;
-		}
-	};
-
-	Range (T a, T b, T step = 1) :
-		m_a (a),
-		m_b (b),
-		m_step (step)
-	{
-		check_bounds();
-	}
-
-	Range() :
-		m_a (T()),
-		m_b (T()) {}
-
-	Iterator begin() const
-	{
-		return Iterator(min(), m_step);
-	}
-
-	Iterator end() const
-	{
-		return Iterator(max(), m_step);
-	}
-
-	T min() const
-	{
-		return m_a;
-	}
-
-	T max() const
-	{
-		return m_b;
-	}
-
-	T step() const
-	{
-		return m_step;
-	}
-
-	void check_bounds()
-	{
-		if (m_b < m_a)
-			std::swap (m_a, m_b);
-	}
-
-	bool contains (T c) const
-	{
-		return c >= m_a
-		   and c <= m_b;
-	}
-
-	bool contains_exclusively (T c) const
-	{
-		return c > m_a
-		   and c < m_b;
-	}
-
-	bool overlaps (Range<T> const& other) const
-	{
-		return contains (other.m_a)
-			or contains (other.m_b);
-	}
-
-	bool operator== (Range<T> const& other) const
-	{
-		return m_a == other.m_a
-		   and m_b == other.m_b;
-	}
-
-	bool operator!= (Range<T> const& other) const
-	{
-		return not operator== (other);
-	}
-};
-
-template<typename T>
-Range<T> range(T a, T b, T step = 1)
-{
-	return Range<T>(a, b, step);
-}
-
-template<typename T>
-Range<T> range(T b)
-{
-	return Range<T>(T(), b);
-}
-
-END_ZFC_NAMESPACE

mercurial