-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRangeList.cs
More file actions
91 lines (82 loc) · 1.34 KB
/
Copy pathRangeList.cs
File metadata and controls
91 lines (82 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Collections.Generic;
using System.Text;
namespace Sid
{
public class RangeList<TYPE>
where TYPE : struct, IComparable
{
List<Range<TYPE>> m_RangeList=new List<Range<TYPE>>();
//~V
public void AddRange(
Range<TYPE> range)
{
m_RangeList.Add(range);
}
}
//TODO this would be better as a struct.
public class Range<TYPE> : IComparable
where TYPE : struct,IComparable
{
public Range()
{
}
public Range(
TYPE? min,
TYPE? max)
{
Min = min;
Max = max;
}
public TYPE? Min
{
get;
set;
}
public TYPE? Max
{
get;
set;
}
int IComparable.CompareTo(object rhs)
{
Range<TYPE> rhsAsRange = (Range <TYPE>)rhs;
if (!Min.HasValue)
{
// If they are both null then they match
return ((rhsAsRange.Min.HasValue) ? -1 : 0);
}
else if (!rhsAsRange.Min.HasValue)
{
return 1;
}
return Min.Value.CompareTo(rhsAsRange.Min.Value);
}
public bool IsInRange(
TYPE value)
{
//UNTESTED.
bool rv;
if (Max.HasValue)
{
if (Min.HasValue)
{
rv = (Min.Value.CompareTo(value) <= 0 && Max.Value.CompareTo(value) >= 0);
}
else
{
rv = (Max.Value.CompareTo(value) >= 0);
}
}
else if (Min.HasValue)
{
rv = (Min.Value.CompareTo(value) <= 0);
}
else
{
rv = true;
}
return rv;
}
}
}