65.9K
CodeProject is changing. Read more.
Home

A simple range structure

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.36/5 (11 votes)

Mar 11, 2003

1 min read

viewsIcon

51950

downloadIcon

398

As its name suggests, it consists of two fields, the start and the end, which define inclusive bounds of a range the structure represents.

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.