1b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata//===--------------------- Range.cpp -----------------------------*- 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#include "lldb/Utility/Range.h" 11b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 12b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatausing namespace lldb_utility; 13b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 14b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::Range (const Range& rng) : 15b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatam_low(rng.m_low), 16b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatam_high(rng.m_high) 17b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 18b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata InitRange(); 19b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 20b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 21b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::Range (Range::ValueType low, 22b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata Range::ValueType high) : 23b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatam_low(low), 24b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatam_high(high) 25b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 26b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata InitRange(); 27b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 28b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 29b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatavoid 30b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::InitRange () 31b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 32b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata if (m_low == OPEN_END) 33b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata { 34b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata if (m_high == OPEN_END) 35b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata m_low = 0; 36b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata else 37b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata { 38b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata // make an empty range 39b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata m_low = 1; 40b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata m_high = 0; 41b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata } 42b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata } 43b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 44b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 45b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange& 46b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::operator = (const Range& rhs) 47b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 48b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata if (&rhs != this) 49b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata { 50b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata this->m_low = rhs.m_low; 51b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata this->m_high = rhs.m_high; 52b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata } 53b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata return *this; 54b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 55b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 56b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatavoid 57b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::Flip () 58b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 59b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata std::swap(m_high, m_low); 60b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 61b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 62b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatavoid 63b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::Intersection (const Range& other) 64b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 65b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata m_low = std::max(m_low,other.m_low); 66b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata m_high = std::min(m_high,other.m_high); 67b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 68b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 69b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatavoid 70b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::Union (const Range& other) 71b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 72b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata m_low = std::min(m_low,other.m_low); 73b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata m_high = std::max(m_high,other.m_high); 74b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 75b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 76b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatavoid 77b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::Iterate (RangeCallback callback) 78b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 79b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata ValueType counter = m_low; 80b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata while (counter <= m_high) 81b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata { 82b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata bool should_continue = callback(counter); 83b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata if (!should_continue) 84b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata return; 85b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata counter++; 86b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata } 87b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 88b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 89b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granatabool 90b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::IsEmpty () 91b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 92b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata return (m_low > m_high); 93b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 94b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata 95b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::ValueType 96b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico GranataRange::GetSize () 97b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata{ 98b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata if (m_high == OPEN_END) 99b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata return OPEN_END; 100b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata if (m_high >= m_low) 101b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata return m_high - m_low + 1; 102b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata return 0; 103b1fb72761226817e7f687eca21cbe9c0a3ec4cf6Enrico Granata} 104