10#include <fmt/format.h>
12#include "slang/text/SourceLocation.h"
13#include "slang/util/ConcurrentMap.h"
23 concurrent_map<std::string_view, uint32_t> indexMap;
24 std::deque<std::string> filenames;
25 mutable std::mutex insertMutex;
28 static constexpr uint32_t
NoFile = UINT32_MAX;
32 auto addFile(std::string_view name) -> uint32_t {
34 if (indexMap.visit(name, [&](
auto const &kv) { result = kv.second; })) {
37 std::lock_guard lock(insertMutex);
38 if (indexMap.visit(name, [&](
auto const &kv) { result = kv.second; })) {
41 auto id =
static_cast<uint32_t
>(filenames.size());
42 auto const &stored = filenames.emplace_back(name);
43 indexMap.emplace(std::string_view(stored),
id);
49 std::lock_guard lock(insertMutex);
50 indexMap.reserve(count);
58 return filenames.at(index);
62 auto size() const ->
size_t {
return filenames.size(); }
92 return fmt::format(
"{}:{}:{}", fileTable.getFilename(
fileIndex),
line,
Definition TextLocation.hpp:20
auto addFile(std::string_view name) -> uint32_t
Definition TextLocation.hpp:32
auto size() const -> size_t
Return the number of unique filenames.
Definition TextLocation.hpp:62
static constexpr uint32_t NoFile
Definition TextLocation.hpp:28
void reserve(size_t count)
Reserve capacity for the given number of entries.
Definition TextLocation.hpp:48
auto getFilename(uint32_t index) const -> std::string_view
Return the filename for the given index.
Definition TextLocation.hpp:54
Definition Utilities.hpp:16
auto hasSourceLocation() const -> bool
Definition TextLocation.hpp:98
auto empty() const -> bool
Definition TextLocation.hpp:96
SourceLocation sourceLocation
Definition TextLocation.hpp:78
size_t line
Definition TextLocation.hpp:73
TextLocation(uint32_t fileIndex, size_t line, size_t column, SourceLocation sourceLocation)
Definition TextLocation.hpp:83
size_t column
Definition TextLocation.hpp:74
auto toString(FileTable const &fileTable) const -> std::string
Definition TextLocation.hpp:88
uint32_t fileIndex
Definition TextLocation.hpp:72
TextLocation(uint32_t fileIndex, size_t line, size_t column)
Definition TextLocation.hpp:81