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