1 //===--------------------- Range.h ------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef utility_Range_h_
11 #define utility_Range_h_
12 
13 #include <stdint.h>
14 #include <algorithm>
15 
16 namespace lldb_utility {
17 
18 class Range
19 {
20 public:
21 
22     typedef uint64_t ValueType;
23 
24     static const ValueType OPEN_END = UINT64_MAX;
25 
26     Range (const Range& rng);
27 
28     Range (ValueType low = 0,
29            ValueType high = OPEN_END);
30 
31     Range&
32     operator = (const Range& rhs);
33 
34     ValueType
GetLow()35     GetLow ()
36     {
37         return m_low;
38     }
39 
40     ValueType
GetHigh()41     GetHigh ()
42     {
43         return m_high;
44     }
45 
46     void
SetLow(ValueType low)47     SetLow (ValueType low)
48     {
49         m_low = low;
50     }
51 
52     void
SetHigh(ValueType high)53     SetHigh (ValueType high)
54     {
55         m_high = high;
56     }
57 
58     void
59     Flip ();
60 
61     void
62     Intersection (const Range& other);
63 
64     void
65     Union (const Range& other);
66 
67     typedef bool (*RangeCallback)(ValueType index);
68 
69     void
70     Iterate (RangeCallback callback);
71 
72     ValueType
73     GetSize ();
74 
75     bool
76     IsEmpty ();
77 
78 private:
79 
80     void
81     InitRange ();
82 
83     ValueType m_low;
84     ValueType m_high;
85 };
86 
87 } // namespace lldb_private
88 
89 #endif // #ifndef utility_Range_h_
90