]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Utility/Range.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Utility / Range.h
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
35     GetLow ()
36     {
37         return m_low;
38     }
39     
40     ValueType
41     GetHigh ()
42     {
43         return m_high;
44     }
45     
46     void
47     SetLow (ValueType low)
48     {
49         m_low = low;
50     }
51     
52     void
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_