summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2010-12-17 23:00:47 (GMT)
committerEvan Martin <martine@danga.com>2010-12-17 23:00:47 (GMT)
commitb0f931f18d4ce98ebbc712d0caa8368b68137028 (patch)
treee9d5fc494309b61198745364f54eb7467325a609
parentcd5dd9e74df2accca52c85cbb1c0e7075660919e (diff)
downloadNinja-b0f931f18d4ce98ebbc712d0caa8368b68137028.zip
Ninja-b0f931f18d4ce98ebbc712d0caa8368b68137028.tar.gz
Ninja-b0f931f18d4ce98ebbc712d0caa8368b68137028.tar.bz2
use hash_map for paths; much faster builds
-rw-r--r--src/eval_env.h3
-rw-r--r--src/hash_map.h12
-rw-r--r--src/ninja.h4
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();