Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32852a57 authored by Adam Lesinski's avatar Adam Lesinski
Browse files

AAPT2: Use hash map for StringPool indices

Hash map has better locality and average case performance

Change-Id: Ic2d111c3cff1d5c0e7e9cbe36714669e6508c275
parent c8108f57
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
#include "util/StringPiece.h"

#include <functional>
#include <map>
#include <unordered_map>
#include <memory>
#include <string>
#include <vector>
@@ -199,7 +199,7 @@ private:

    std::vector<std::unique_ptr<Entry>> mStrings;
    std::vector<std::unique_ptr<StyleEntry>> mStyles;
    std::multimap<StringPiece16, Entry*> mIndexedStrings;
    std::unordered_multimap<StringPiece16, Entry*> mIndexedStrings;
};

//
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@

#include <androidfw/ResourceTypes.h>
#include <algorithm>
#include <map>
#include <utils/misc.h>
#include <vector>

+14 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include <ostream>
#include <string>
#include <utils/JenkinsHash.h>
#include <utils/String8.h>
#include <utils/Unicode.h>

@@ -257,4 +258,17 @@ inline ::std::ostream& operator<<(::std::ostream& out, const std::u16string& str
    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