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