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