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