ROSE 0.11.145.250
Location.h
1#ifndef ROSE_Location_H
2#define ROSE_Location_H
3#include <RoseFirst.h>
4#include <ostream>
5#include <string>
6
7namespace Rose {
8
23class Location {
24public:
25 // NOTICE: Subclasses must implemented a static "parse" method
26
27
28 virtual ~Location() = default;
29
35 virtual std::string toString() const = 0;
36
42 virtual void print(std::ostream&) const = 0;
43
48 virtual std::string printableName() const = 0;
49
61 virtual bool isEqual(const Location &other) const = 0;
62 virtual bool operator==(const Location &other) const final {
63 return isEqual(other) && other.isEqual(*this);
64 }
65 virtual bool operator!=(const Location &other) const final {
66 return !(*this == other);
67 }
71 virtual bool operator<(const Location&) const = 0;
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
79#ifdef _MSC_VER
80 // buggy compiler unable to compile this declaration; error is "C2216: 'explicit' cannot be used with 'sealed'". So we'll
81 // rely on the non-Microsoft compilers to enforce the "final".
82 virtual explicit operator bool() const {
83 return isValid();
84 }
85#else
86 virtual explicit operator bool() const final {
87 return isValid();
88 }
89#endif
90 virtual bool isValid() const = 0;
98 virtual bool operator!() const final {
99 return isEmpty();
100 }
101 virtual bool isEmpty() const final {
102 return *this ? false : true;
103 }
105};
106
107inline std::ostream& operator<<(std::ostream &out, const Location &x) {
108 x.print(out);
109 return out;
110}
111
112
113} // namespace
114#endif
Base class for location types.
Definition Location.h:23
virtual bool operator!=(const Location &other) const final
Equality and inequality.
Definition Location.h:65
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:101
virtual bool operator!() const final
Test whether this object is empty.
Definition Location.h:98
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:62
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.