1 /* 2 * Copyright 2016 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 GrResourceHandle_DEFINED 9 #define GrResourceHandle_DEFINED 10 11 #include "SkTypes.h" 12 13 // Opaque handle to a resource. Users should always use the macro below to create a specific 14 // template instantiation of GrResourceHandle. 15 template <typename kind> class GrResourceHandle { 16 public: GrResourceHandle(int value)17 GrResourceHandle(int value) : fValue(value) { 18 SkASSERT(this->isValid()); 19 } 20 GrResourceHandle()21 GrResourceHandle() : fValue(kInvalid_ResourceHandle) {} 22 23 bool operator==(const GrResourceHandle& other) const { return other.fValue == fValue; } isValid()24 bool isValid() const { return kInvalid_ResourceHandle != fValue; } toIndex()25 int toIndex() const { SkASSERT(this->isValid()); return fValue; } 26 27 private: 28 static const int kInvalid_ResourceHandle = -1; 29 int fValue; 30 }; 31 32 // Creates a type "name", which is a specfic template instantiation of GrResourceHandle. 33 #define GR_DEFINE_RESOURCE_HANDLE_CLASS(name) \ 34 struct name##Kind {}; \ 35 using name = GrResourceHandle<name##Kind>; 36 #endif 37