diff options
author | Evan Martin <martine@danga.com> | 2010-12-17 23:00:47 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2010-12-17 23:00:47 (GMT) |
commit | b0f931f18d4ce98ebbc712d0caa8368b68137028 (patch) | |
tree | e9d5fc494309b61198745364f54eb7467325a609 | |
parent | cd5dd9e74df2accca52c85cbb1c0e7075660919e (diff) | |
download | Ninja-b0f931f18d4ce98ebbc712d0caa8368b68137028.zip Ninja-b0f931f18d4ce98ebbc712d0caa8368b68137028.tar.gz Ninja-b0f931f18d4ce98ebbc712d0caa8368b68137028.tar.bz2 |
use hash_map for paths; much faster builds
-rw-r--r-- | src/eval_env.h | 3 | ||||
-rw-r--r-- | src/hash_map.h | 12 | ||||
-rw-r--r-- | src/ninja.h | 4 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/eval_env.h b/src/eval_env.h index a630e7a..cc61a38 100644 --- a/src/eval_env.h +++ b/src/eval_env.h @@ -1,6 +1,9 @@ #ifndef NINJA_EVAL_ENV_H_ #define NINJA_EVAL_ENV_H_ +#include <map> +using namespace std; + // A scope for variable lookups. struct Env { virtual string LookupVariable(const string& var) = 0; diff --git a/src/hash_map.h b/src/hash_map.h new file mode 100644 index 0000000..820f773 --- /dev/null +++ b/src/hash_map.h @@ -0,0 +1,12 @@ +#include <ext/hash_map> + +using __gnu_cxx::hash_map; + +namespace __gnu_cxx { +template<> +struct hash<std::string> { + size_t operator()(const std::string& s) const { + return hash<const char*>()(s.c_str()); + } +}; +} diff --git a/src/ninja.h b/src/ninja.h index ecfb2d0..fb0b7fb 100644 --- a/src/ninja.h +++ b/src/ninja.h @@ -2,7 +2,6 @@ #define NINJA_NINJA_H_ #include <algorithm> -#include <map> #include <queue> #include <set> #include <string> @@ -13,6 +12,7 @@ using namespace std; #include "eval_env.h" +#include "hash_map.h" int ReadFile(const string& path, string* contents, string* err); @@ -135,7 +135,7 @@ struct Edge { }; struct StatCache { - typedef map<string, FileStat*> Paths; + typedef hash_map<string, FileStat*> Paths; Paths paths_; FileStat* GetFile(const string& path); void Dump(); |