Skia
2DGraphicsLibrary
Main Page
Related Pages
Classes
Files
File List
File Members
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
SkTypes.h
SkTRegistry
Template class that registers itself (in the constructor) into a linked-list and provides a function-...
Definition:
SkTRegistry.h:19