summaryrefslogtreecommitdiff
path: root/tools/aapt/ResourceIdCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/aapt/ResourceIdCache.cpp')
-rw-r--r--tools/aapt/ResourceIdCache.cpp107
1 files changed, 0 insertions, 107 deletions
diff --git a/tools/aapt/ResourceIdCache.cpp b/tools/aapt/ResourceIdCache.cpp
deleted file mode 100644
index e03f4f668a1e..000000000000
--- a/tools/aapt/ResourceIdCache.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-//
-// Copyright 2012 The Android Open Source Project
-//
-// Manage a resource ID cache.
-
-#define LOG_TAG "ResourceIdCache"
-
-#include <utils/String16.h>
-#include <utils/Log.h>
-#include "ResourceIdCache.h"
-#include <map>
-using namespace std;
-
-
-static size_t mHits = 0;
-static size_t mMisses = 0;
-static size_t mCollisions = 0;
-
-static const size_t MAX_CACHE_ENTRIES = 2048;
-static const android::String16 TRUE16("1");
-static const android::String16 FALSE16("0");
-
-struct CacheEntry {
- // concatenation of the relevant strings into a single instance
- android::String16 hashedName;
- uint32_t id;
-
- CacheEntry() {}
- CacheEntry(const android::String16& name, uint32_t resId) : hashedName(name), id(resId) { }
-};
-
-static map< uint32_t, CacheEntry > mIdMap;
-
-
-// djb2; reasonable choice for strings when collisions aren't particularly important
-static inline uint32_t hashround(uint32_t hash, int c) {
- return ((hash << 5) + hash) + c; /* hash * 33 + c */
-}
-
-static uint32_t hash(const android::String16& hashableString) {
- uint32_t hash = 5381;
- const char16_t* str = hashableString.string();
- while (int c = *str++) hash = hashround(hash, c);
- return hash;
-}
-
-namespace android {
-
-static inline String16 makeHashableName(const android::String16& package,
- const android::String16& type,
- const android::String16& name,
- bool onlyPublic) {
- String16 hashable = String16(name);
- hashable += type;
- hashable += package;
- hashable += (onlyPublic ? TRUE16 : FALSE16);
- return hashable;
-}
-
-uint32_t ResourceIdCache::lookup(const android::String16& package,
- const android::String16& type,
- const android::String16& name,
- bool onlyPublic) {
- const String16 hashedName = makeHashableName(package, type, name, onlyPublic);
- const uint32_t hashcode = hash(hashedName);
- map<uint32_t, CacheEntry>::iterator item = mIdMap.find(hashcode);
- if (item == mIdMap.end()) {
- // cache miss
- mMisses++;
- return 0;
- }
-
- // legit match?
- if (hashedName == (*item).second.hashedName) {
- mHits++;
- return (*item).second.id;
- }
-
- // collision
- mCollisions++;
- mIdMap.erase(hashcode);
- return 0;
-}
-
-// returns the resource ID being stored, for callsite convenience
-uint32_t ResourceIdCache::store(const android::String16& package,
- const android::String16& type,
- const android::String16& name,
- bool onlyPublic,
- uint32_t resId) {
- if (mIdMap.size() < MAX_CACHE_ENTRIES) {
- const String16 hashedName = makeHashableName(package, type, name, onlyPublic);
- const uint32_t hashcode = hash(hashedName);
- mIdMap[hashcode] = CacheEntry(hashedName, resId);
- }
- return resId;
-}
-
-void ResourceIdCache::dump() {
- printf("ResourceIdCache dump:\n");
- printf("Size: %ld\n", mIdMap.size());
- printf("Hits: %ld\n", mHits);
- printf("Misses: %ld\n", mMisses);
- printf("(Collisions: %ld)\n", mCollisions);
-}
-
-}