ROSE 0.11.145.277
Location.h
1#ifndef ROSE_Location_H
2#define ROSE_Location_H
3#include <RoseFirst.h>
4#include <cstdint>
5#include <ostream>
6#include <string>
7
8namespace Rose {
9
24class Location {
25public:
26 // NOTICE: Subclasses must implemented a static "parse" method
27
28
29 virtual ~Location() = default;
30
36 virtual std::string toString() const = 0;
37
43 virtual void print(std::ostream&) const = 0;
44
49 virtual std::string printableName() const = 0;
50
62 virtual bool isEqual(const Location &other) const = 0;
63 virtual bool operator==(const Location &other) const final {
64 return isEqual(other) && other.isEqual(*this);
65 }
66 virtual bool operator!=(const Location &other) const final {
67 return !(*this == other);
68 }
72 virtual bool operator<(const Location&) const = 0;
73 virtual bool operator<=(const Location&) const = 0;
74 virtual bool operator>(const Location&) const = 0;
75 virtual bool operator>=(const Location&) const = 0;
76
80#ifdef _MSC_VER
81 // buggy compiler unable to compile this declaration; error is "C2216: 'explicit' cannot be used with 'sealed'". So we'll
82 // rely on the non-Microsoft compilers to enforce the "final".
83 virtual explicit operator bool() const {
84 return isValid();
85 }
86#else
87 virtual explicit operator bool() const final {
88 return isValid();
89 }
90#endif
91 virtual bool isValid() const = 0;
99 virtual bool operator!() const final {
100 return isEmpty();
101 }
102 virtual bool isEmpty() const final {
103 return *this ? false : true;
104 }
108 virtual uint64_t hash() const = 0;
109};
110
111inline std::ostream& operator<<(std::ostream &out, const Location &x) {
112 x.print(out);
113 return out;
114}
115
116
117} // namespace
118#endif
Base class for location types.
Definition Location.h:24
virtual bool operator!=(const Location &other) const final
Equality and inequality.
Definition Location.h:66
virtual bool isValid() const =0
Test whether this object is valid.
virtual bool isEmpty() const final
Test whether this object is empty.
Definition Location.h:102
virtual bool operator!() const final
Test whether this object is empty.
Definition Location.h:99
virtual void print(std::ostream &) const =0
Output location to a stream.
virtual bool operator==(const Location &other) const final
Equality and inequality.
Definition Location.h:63
virtual uint64_t hash() const =0
Compute a 64-bit hash of this object.
virtual bool isEqual(const Location &other) const =0
Equality and inequality.
virtual std::string printableName() const =0
Convert location to escaped, parsable string.
virtual std::string toString() const =0
Convert location to string.
The ROSE library.