From 8c79817dc6459baa2c79db88e3c3e4d5c07d6a61 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Wed, 7 Mar 2012 19:36:08 -0800 Subject: remove files that moved to frameworks/native Change-Id: I140d291e520097b1148930f736823650e08488f7 --- include/utils/GenerationCache.h | 247 ---------------------------------------- 1 file changed, 247 deletions(-) delete mode 100644 include/utils/GenerationCache.h (limited to 'include/utils/GenerationCache.h') diff --git a/include/utils/GenerationCache.h b/include/utils/GenerationCache.h deleted file mode 100644 index 40722d11e394..000000000000 --- a/include/utils/GenerationCache.h +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_UTILS_GENERATION_CACHE_H -#define ANDROID_UTILS_GENERATION_CACHE_H - -#include -#include - -namespace android { - -/** - * GenerationCache callback used when an item is removed - */ -template -class OnEntryRemoved { -public: - virtual ~OnEntryRemoved() { }; - virtual void operator()(EntryKey& key, EntryValue& value) = 0; -}; // class OnEntryRemoved - -template -struct Entry: public LightRefBase > { - Entry(const Entry& e) : - key(e.key), value(e.value), - parent(e.parent), child(e.child) { } - Entry(const EntryKey& key, const EntryValue& value) : - key(key), value(value) { } - - EntryKey key; - EntryValue value; - - sp > parent; // next older entry - sp > child; // next younger entry -}; // struct Entry - -/** - * A LRU type cache - */ -template -class GenerationCache { -public: - GenerationCache(uint32_t maxCapacity); - virtual ~GenerationCache(); - - enum Capacity { - kUnlimitedCapacity, - }; - - void setOnEntryRemovedListener(OnEntryRemoved* listener); - - size_t size() const; - - void clear(); - - bool contains(const K& key) const; - const K& getKeyAt(size_t index) const; - const V& getValueAt(size_t index) const; - - const V& get(const K& key); - bool put(const K& key, const V& value); - - void removeAt(ssize_t index); - bool remove(const K& key); - bool removeOldest(); - -private: - KeyedVector > > mCache; - uint32_t mMaxCapacity; - - OnEntryRemoved* mListener; - - sp > mOldest; - sp > mYoungest; - - void attachToCache(const sp >& entry); - void detachFromCache(const sp >& entry); - - const V mNullValue; -}; // class GenerationCache - -template -GenerationCache::GenerationCache(uint32_t maxCapacity): mMaxCapacity(maxCapacity), - mListener(NULL), mNullValue(NULL) { -}; - -template -GenerationCache::~GenerationCache() { - clear(); -}; - -template -uint32_t GenerationCache::size() const { - return mCache.size(); -} - -/** - * Should be set by the user of the Cache so that the callback is called whenever an item is - * removed from the cache - */ -template -void GenerationCache::setOnEntryRemovedListener(OnEntryRemoved* listener) { - mListener = listener; -} - -template -void GenerationCache::clear() { - if (mListener) { - for (uint32_t i = 0; i < mCache.size(); i++) { - sp > entry = mCache.valueAt(i); - if (mListener) { - (*mListener)(entry->key, entry->value); - } - } - } - mCache.clear(); - mYoungest.clear(); - mOldest.clear(); -} - -template -bool GenerationCache::contains(const K& key) const { - return mCache.indexOfKey(key) >= 0; -} - -template -const K& GenerationCache::getKeyAt(size_t index) const { - return mCache.keyAt(index); -} - -template -const V& GenerationCache::getValueAt(size_t index) const { - return mCache.valueAt(index)->value; -} - -template -const V& GenerationCache::get(const K& key) { - ssize_t index = mCache.indexOfKey(key); - if (index >= 0) { - const sp >& entry = mCache.valueAt(index); - detachFromCache(entry); - attachToCache(entry); - return entry->value; - } - - return mNullValue; -} - -template -bool GenerationCache::put(const K& key, const V& value) { - if (mMaxCapacity != kUnlimitedCapacity && mCache.size() >= mMaxCapacity) { - removeOldest(); - } - - ssize_t index = mCache.indexOfKey(key); - if (index < 0) { - sp > entry = new Entry(key, value); - mCache.add(key, entry); - attachToCache(entry); - return true; - } - - return false; -} - -template -bool GenerationCache::remove(const K& key) { - ssize_t index = mCache.indexOfKey(key); - if (index >= 0) { - removeAt(index); - return true; - } - - return false; -} - -template -void GenerationCache::removeAt(ssize_t index) { - sp > entry = mCache.valueAt(index); - if (mListener) { - (*mListener)(entry->key, entry->value); - } - mCache.removeItemsAt(index, 1); - detachFromCache(entry); -} - -template -bool GenerationCache::removeOldest() { - if (mOldest.get()) { - ssize_t index = mCache.indexOfKey(mOldest->key); - if (index >= 0) { - removeAt(index); - return true; - } - ALOGE("GenerationCache: removeOldest failed to find the item in the cache " - "with the given key, but we know it must be in there. " - "Is the key comparator kaput?"); - } - - return false; -} - -template -void GenerationCache::attachToCache(const sp >& entry) { - if (!mYoungest.get()) { - mYoungest = mOldest = entry; - } else { - entry->parent = mYoungest; - mYoungest->child = entry; - mYoungest = entry; - } -} - -template -void GenerationCache::detachFromCache(const sp >& entry) { - if (entry->parent.get()) { - entry->parent->child = entry->child; - } else { - mOldest = entry->child; - } - - if (entry->child.get()) { - entry->child->parent = entry->parent; - } else { - mYoungest = entry->parent; - } - - entry->parent.clear(); - entry->child.clear(); -} - -}; // namespace android - -#endif // ANDROID_UTILS_GENERATION_CACHE_H -- cgit v1.2.3-59-g8ed1b