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