00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkTRegistry_DEFINED
00018 #define SkTRegistry_DEFINED
00019
00020 #include "SkTypes.h"
00021
00026 template <typename T, typename P> class SkTRegistry : SkNoncopyable {
00027 public:
00028 typedef T (*Factory)(P);
00029
00030 SkTRegistry(Factory fact) {
00031 #ifdef ANDROID
00032
00033 {
00034 SkTRegistry* reg = gHead;
00035 while (reg) {
00036 if (reg == this) {
00037 return;
00038 }
00039 reg = reg->fChain;
00040 }
00041 }
00042 #endif
00043 fFact = fact;
00044 fChain = gHead;
00045 gHead = this;
00046 }
00047
00048 static const SkTRegistry* Head() { return gHead; }
00049
00050 const SkTRegistry* next() const { return fChain; }
00051 Factory factory() const { return fFact; }
00052
00053 private:
00054 Factory fFact;
00055 SkTRegistry* fChain;
00056
00057 static SkTRegistry* gHead;
00058 };
00059
00060
00061 template <typename T, typename P> SkTRegistry<T, P>* SkTRegistry<T, P>::gHead;
00062
00063 #endif