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