Skia
2DGraphicsLibrary
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkTRegistry.h
1 
2 /*
3  * Copyright 2009 The Android Open Source Project
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 SkTRegistry_DEFINED
11 #define SkTRegistry_DEFINED
12 
13 #include "SkTypes.h"
14 
19 template <typename T> class SkTRegistry : SkNoncopyable {
20 public:
21  typedef T Factory;
22 
23  explicit SkTRegistry(T fact) : fFact(fact) {
24 #ifdef SK_BUILD_FOR_ANDROID
25  // work-around for double-initialization bug
26  {
27  SkTRegistry* reg = gHead;
28  while (reg) {
29  if (reg == this) {
30  return;
31  }
32  reg = reg->fChain;
33  }
34  }
35 #endif
36  fChain = gHead;
37  gHead = this;
38  }
39 
40  static const SkTRegistry* Head() { return gHead; }
41 
42  const SkTRegistry* next() const { return fChain; }
43  const Factory& factory() const { return fFact; }
44 
45 private:
46  Factory fFact;
47  SkTRegistry* fChain;
48 
49  static SkTRegistry* gHead;
50 };
51 
52 // The caller still needs to declare an instance of this somewhere
53 template <typename T> SkTRegistry<T>* SkTRegistry<T>::gHead;
54 
55 #endif
Template class that registers itself (in the constructor) into a linked-list and provides a function-...
Definition: SkTRegistry.h:19