Introduction
In this article I'll present a simple data structure I had a need for. As its
name suggests, it consists of two fields, the start and the end, which define
inclusive bounds of a range the structure represents. The relation between
bounds could exist as follows:
- The end is greater than the start
- The end is equal as the start meaning the range is consisted of only one
representative
- The end is one less than the start meaning the range is empty
The structure contains following members:
Constructors
Range(int start, int end)
- constructs a range of given
bounds
Range(ICollection col)
- setup range to collection's lower and
upper bounds
Properties
int start
- get or set lower bound
int end
- get or set upper bound
int mid
- get center point
int []
- obtain an element by a zero-based index
int Count
- get a number of elements
bool Empty
- returns true if range has no
elements
Functions
void Set(int start, int end)
- redefines a range
bool Between(int value)
- returns true if value is within
current range
int Saturate(int value)
- forces value between current
bounds
void Offset(int o)
- moves range by o
void Resize(int s)
- moves upper bound by s
Range
structure is declared as an ICollection
, meaning, it could
be used as a simple sequential number generator. For example:
foreach(int i in new Range(1, 10)) Console.Out.WriteLine(i);
Since the structure is consisted of only two fields which are mostly accessed
in pair, I believe it was a reasonable choice to declare it as a value type.