diff options
author | tikuta <tikuta@google.com> | 2017-04-12 05:40:40 (GMT) |
---|---|---|
committer | Takuto Ikuta <tikuta@chromium.org> | 2017-05-08 09:34:36 (GMT) |
commit | 3b320023276f98b978054c14c65d3888b989ff4a (patch) | |
tree | 7454ece5d1d4c8be8b1d2217072707d06792aec4 /src/includes_normalize.h | |
parent | 08a3220bc2fe12e7f05967b317d221e0bc620be9 (diff) | |
download | Ninja-3b320023276f98b978054c14c65d3888b989ff4a.zip Ninja-3b320023276f98b978054c14c65d3888b989ff4a.tar.gz Ninja-3b320023276f98b978054c14c65d3888b989ff4a.tar.bz2 |
Make clparser faster
This patch improves perfromance of clparser.
* Reduce the number of calling GetFullPathName.
* Use StringPiece for Split and Join.
* Add EqualsCaseInsensitive for StringPiece not to generate new string
instance.
* Add some utility member in StringPiece class.
Diffstat (limited to 'src/includes_normalize.h')
-rw-r--r-- | src/includes_normalize.h | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/includes_normalize.h b/src/includes_normalize.h index 98e912f..2ec08ed 100644 --- a/src/includes_normalize.h +++ b/src/includes_normalize.h @@ -21,15 +21,19 @@ struct StringPiece; /// Utility functions for normalizing include paths on Windows. /// TODO: this likely duplicates functionality of CanonicalizePath; refactor. struct IncludesNormalize { + /// Normalize path relative to |relative_to|. + IncludesNormalize(const string& relative_to); + // Internal utilities made available for testing, maybe useful otherwise. - static string Join(const vector<string>& list, char sep); - static vector<string> Split(const string& input, char sep); - static string ToLower(const string& s); static string AbsPath(StringPiece s); - static string Relativize(StringPiece path, const string& start); + static string Relativize(StringPiece path, + const vector<StringPiece>& start_list); /// Normalize by fixing slashes style, fixing redundant .. and . and makes the - /// path relative to |relative_to|. - static bool Normalize(const string& input, const char* relative_to, - string* result, string* err); + /// path relative to |relative_to_|. + bool Normalize(const string& input, string* result, string* err) const; + + private: + string relative_to_; + vector<StringPiece> splitted_relative_to_; }; |