diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-04-13T14·34+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-04-13T14·34+0000 |
commit | 816f9c0f6fae0229961bb573dfa0f75ff42c14eb (patch) | |
tree | 527a729253e5fa6a393fc1fe9a891d802a12aa7e | |
parent | 7d47498b5ea1ad4685bad954e5407f628f7f5595 (diff) |
* Use std::tr1::unordered_set instead of std::set for the symbol
table. This gives a 10% speed increase on `nix-instantiate /etc/nixos/nixos -A system --readonly-mode'.
-rw-r--r-- | src/libexpr/eval.cc | 1 | ||||
-rw-r--r-- | src/libexpr/symbol-table.hh | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index fbd618d4173b..0505c5b2420c 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -1058,6 +1058,7 @@ void EvalState::printStats() printMsg(v, format(" stack space per eval() level: %1% bytes") % ((&x - deepestStack) / (float) maxRecursionDepth)); printMsg(v, format(" values allocated: %1%") % nrValues); printMsg(v, format(" environments allocated: %1%") % nrEnvs); + printMsg(v, format(" symbols in symbol table: %1%") % symbols.size()); } diff --git a/src/libexpr/symbol-table.hh b/src/libexpr/symbol-table.hh index ae0751d11d3c..424c2353899e 100644 --- a/src/libexpr/symbol-table.hh +++ b/src/libexpr/symbol-table.hh @@ -2,6 +2,7 @@ #define __SYMBOL_TABLE_H #include <map> +#include <tr1/unordered_set> #include "types.hh" @@ -59,7 +60,7 @@ inline std::ostream & operator << (std::ostream & str, const Symbol & sym) class SymbolTable { private: - typedef std::set<string> Symbols; + typedef std::tr1::unordered_set<string> Symbols; Symbols symbols; public: @@ -68,6 +69,11 @@ public: std::pair<Symbols::iterator, bool> res = symbols.insert(s); return Symbol(&*res.first); } + + unsigned int size() const + { + return symbols.size(); + } }; } |