6#include <unordered_map>
24 const std::string * s;
26 explicit SymbolStr(
const std::string &
symbol): s(&
symbol) {}
29 bool operator == (std::string_view s2)
const
34 const char * c_str()
const
39 operator const std::string_view ()
const
44 friend std::ostream & operator <<(std::ostream & os,
const SymbolStr &
symbol);
64 explicit Symbol(uint32_t
id): id(id) {}
69 explicit operator bool()
const {
return id > 0; }
71 auto operator<=>(
const Symbol other)
const {
return id <=> other.id; }
72 bool operator==(
const Symbol other)
const {
return id == other.id; }
74 friend class std::hash<Symbol>;
84 std::unordered_map<std::string_view, std::pair<const std::string *, uint32_t>> symbols;
99 auto it = symbols.find(
s);
100 if (it != symbols.end())
return Symbol(it->second.second + 1);
102 const auto & [rawSym, idx] = store.add(std::string(
s));
103 symbols.emplace(rawSym, std::make_pair(&rawSym, idx));
107 std::vector<SymbolStr> resolve(
const std::vector<Symbol> &
symbols)
const
109 std::vector<SymbolStr> result;
110 result.reserve(
symbols.size());
112 result.push_back((*
this)[sym]);
116 SymbolStr operator[](Symbol
s)
const
118 if (
s.id == 0 ||
s.id >
store.size())
120 return SymbolStr(
store[
s.id - 1]);
128 size_t totalSize()
const;
131 void dump(T callback)
const
133 store.forEach(callback);
140struct std::hash<nix::Symbol>
142 std::size_t operator()(
const nix::Symbol &
s)
const noexcept
144 return std::hash<
decltype(
s.id)>{}(
s.id);
Definition chunked-vector.hh:23
friend class SymbolTable
Definition symbol-table.hh:21
Definition symbol-table.hh:82
Symbol create(std::string_view s)
Definition symbol-table.hh:92
Definition symbol-table.hh:58
friend class SymbolTable
Definition symbol-table.hh:59
This file defines two main structs/classes used in nix error handling.
ChunkedVector< std::string, 8192 > store
Definition lexer.l:1011
return s
Definition lexer.l:459
Symbol symbol
Definition lexer.l:5834
std::unordered_map< std::string_view, std::pair< const std::string *, uint32_t > > symbols
Definition lexer.l:1010