1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrTextureProxyCacheAccess_DEFINED
9 #define GrTextureProxyCacheAccess_DEFINED
10 
11 #include "src/gpu/GrTextureProxy.h"
12 
13 /**
14  * This class allows GrResourceCache increased privileged access to GrTextureProxy objects.
15  */
16 class GrTextureProxy::CacheAccess {
17 private:
setUniqueKey(GrProxyProvider * proxyProvider,const GrUniqueKey & key)18     void setUniqueKey(GrProxyProvider* proxyProvider, const GrUniqueKey& key) {
19         fTextureProxy->setUniqueKey(proxyProvider, key);
20     }
21 
clearUniqueKey()22     void clearUniqueKey() {
23         fTextureProxy->clearUniqueKey();
24     }
25 
CacheAccess(GrTextureProxy * textureProxy)26     explicit CacheAccess(GrTextureProxy* textureProxy) : fTextureProxy(textureProxy) {}
CacheAccess(const CacheAccess &)27     CacheAccess(const CacheAccess&) {} // unimpl
28     CacheAccess& operator=(const CacheAccess&); // unimpl
29 
30     // No taking addresses of this type.
31     const CacheAccess* operator&() const;
32     CacheAccess* operator&();
33 
34     GrTextureProxy* fTextureProxy;
35 
36     friend class GrTextureProxy;  // to construct/copy this type.
37     friend class GrProxyProvider; // to use this type
38 };
39 
cacheAccess()40 inline GrTextureProxy::CacheAccess GrTextureProxy::cacheAccess() { return CacheAccess(this); }
41 
cacheAccess()42 inline const GrTextureProxy::CacheAccess GrTextureProxy::cacheAccess() const {
43     return CacheAccess(const_cast<GrTextureProxy*>(this));
44 }
45 
46 #endif
47