8 #include <hilti/rt/filesystem.h> 10 #include <hilti/base/util.h> 29 Location(hilti::rt::filesystem::path file =
"",
int from_line = -1,
int to_line = -1,
int from_character = -1,
30 int to_character = -1)
31 : _file(
std::move(file)),
32 _from_line(from_line),
34 _from_character(from_character),
35 _to_character(to_character) {}
43 auto file()
const {
return _file.generic_string(); }
44 auto from()
const {
return _from_line; }
45 auto to()
const {
return _to_line; }
52 std::string
render(
bool no_path =
false)
const;
58 explicit operator bool()
const;
61 operator std::string()
const {
return render(); }
63 bool operator<(
const Location& other)
const {
64 return std::tie(_file, _from_line, _from_character, _to_line, _to_character) <
65 std::tie(other._file, other._from_line, other._from_character, other._to_line, other._to_character);
68 bool operator==(
const Location& other)
const {
69 return std::tie(_file, _from_line, _from_character, _to_line, _to_character) ==
70 std::tie(other._file, other._from_line, other._from_character, other._to_line, other._to_character);
74 hilti::rt::filesystem::path _file;
78 int _from_character = -1;
79 int _to_character = -1;
81 friend struct std::hash<Location>;
85 inline auto to_string(
const Location& l) {
return l.
render(); }
88 inline std::ostream& operator<<(std::ostream& out,
const Location& l) {
95 extern const Location None;
104 auto hash = std::hash<const char*>()(x._file.c_str());
105 hash = hilti::rt::hashCombine(hash, x._from_line);
106 hash = hilti::rt::hashCombine(hash, x._to_line);
107 hash = hilti::rt::hashCombine(hash, x._from_character);
108 hash = hilti::rt::hashCombine(hash, x._to_character);
Definition: optional.h:79
Location(hilti::rt::filesystem::path file="", int from_line=-1, int to_line=-1, int from_character=-1, int to_character=-1)
Definition: location.h:29
std::string render(bool no_path=false) const
Definition: location.cc:12
Definition: location.h:17
Definition: location.h:93