AAPT2: Use hash map for StringPool indices
Hash map has better locality and average case performance
Change-Id: Ic2d111c3cff1d5c0e7e9cbe36714669e6508c275
diff --git a/tools/aapt2/util/StringPiece.h b/tools/aapt2/util/StringPiece.h
index f91bccc..f5c985b 100644
--- a/tools/aapt2/util/StringPiece.h
+++ b/tools/aapt2/util/StringPiece.h
@@ -19,6 +19,7 @@
#include <ostream>
#include <string>
+#include <utils/JenkinsHash.h>
#include <utils/String8.h>
#include <utils/Unicode.h>
@@ -257,4 +258,17 @@
return out.write(utf8.string(), utf8.size());
}
+namespace std {
+
+template <typename TChar>
+struct hash<aapt::BasicStringPiece<TChar>> {
+ size_t operator()(const aapt::BasicStringPiece<TChar>& str) const {
+ uint32_t hashCode = android::JenkinsHashMixBytes(
+ 0, reinterpret_cast<const uint8_t*>(str.data()), sizeof(TChar) * str.size());
+ return static_cast<size_t>(hashCode);
+ }
+};
+
+} // namespace std
+
#endif // AAPT_STRING_PIECE_H