diff options
Diffstat (limited to 'third_party/nix/src/libexpr/symbol-table.hh')
-rw-r--r-- | third_party/nix/src/libexpr/symbol-table.hh | 111 |
1 files changed, 42 insertions, 69 deletions
diff --git a/third_party/nix/src/libexpr/symbol-table.hh b/third_party/nix/src/libexpr/symbol-table.hh index 91faea122ce1..932bff5b46fb 100644 --- a/third_party/nix/src/libexpr/symbol-table.hh +++ b/third_party/nix/src/libexpr/symbol-table.hh @@ -2,7 +2,6 @@ #include <map> #include <unordered_set> - #include "types.hh" namespace nix { @@ -13,75 +12,49 @@ namespace nix { they can be compared efficiently (using a pointer equality test), because the symbol table stores only one copy of each string. */ -class Symbol -{ -private: - const string * s; // pointer into SymbolTable - Symbol(const string * s) : s(s) { }; - friend class SymbolTable; - -public: - Symbol() : s(0) { }; - - bool operator == (const Symbol & s2) const - { - return s == s2.s; - } - - bool operator != (const Symbol & s2) const - { - return s != s2.s; - } - - bool operator < (const Symbol & s2) const - { - return s < s2.s; - } - - operator const string & () const - { - return *s; - } - - bool set() const - { - return s; - } - - bool empty() const - { - return s->empty(); - } - - friend std::ostream & operator << (std::ostream & str, const Symbol & sym); +class Symbol { + private: + const string* s; // pointer into SymbolTable + Symbol(const string* s) : s(s){}; + friend class SymbolTable; + + public: + Symbol() : s(0){}; + + bool operator==(const Symbol& s2) const { return s == s2.s; } + + bool operator!=(const Symbol& s2) const { return s != s2.s; } + + bool operator<(const Symbol& s2) const { return s < s2.s; } + + operator const string&() const { return *s; } + + bool set() const { return s; } + + bool empty() const { return s->empty(); } + + friend std::ostream& operator<<(std::ostream& str, const Symbol& sym); }; -class SymbolTable -{ -private: - typedef std::unordered_set<string> Symbols; - Symbols symbols; - -public: - Symbol create(const string & s) - { - std::pair<Symbols::iterator, bool> res = symbols.insert(s); - return Symbol(&*res.first); - } - - size_t size() const - { - return symbols.size(); - } - - size_t totalSize() const; - - template<typename T> - void dump(T callback) - { - for (auto & s : symbols) - callback(s); - } +class SymbolTable { + private: + typedef std::unordered_set<string> Symbols; + Symbols symbols; + + public: + Symbol create(const string& s) { + std::pair<Symbols::iterator, bool> res = symbols.insert(s); + return Symbol(&*res.first); + } + + size_t size() const { return symbols.size(); } + + size_t totalSize() const; + + template <typename T> + void dump(T callback) { + for (auto& s : symbols) callback(s); + } }; -} +} // namespace nix |