1f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 2f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/* 3f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Copyright 2010 Google Inc. 4f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * 5f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 6f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * found in the LICENSE file. 7f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */ 8f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 9f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 10f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#ifndef SkBitmapCache_DEFINED 11f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SkBitmapCache_DEFINED 12f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 13f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include "SkBitmap.h" 14f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 15f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerclass SkBitmapCache : SkNoncopyable { 16f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic: 17f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkBitmapCache(int maxEntries); 18f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger ~SkBitmapCache(); 19f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 20f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger bool find(const void* buffer, size_t len, SkBitmap*) const; 21f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void add(const void* buffer, size_t len, const SkBitmap&); 22f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 23f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerprivate: 24f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger int fEntryCount; 25f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const int fMaxEntries; 26f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 27f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger struct Entry; 28f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger mutable Entry* fHead; 29f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger mutable Entry* fTail; 30f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 31f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger inline Entry* detach(Entry*) const; 32f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger inline void attachToHead(Entry*) const; 33f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 34f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#ifdef SK_DEBUG 35f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void validate() const; 36f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#else 37f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger void validate() const {} 38f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 39f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 40f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger class AutoValidate : SkNoncopyable { 41f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger public: 42f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger AutoValidate(const SkBitmapCache* bc) : fBC(bc) { bc->validate(); } 43f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger ~AutoValidate() { fBC->validate(); } 44f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger private: 45f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger const SkBitmapCache* fBC; 46f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger }; 47f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger}; 48f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 49f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 50f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 51