00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00036 #ifndef ASSET_META_H
00037 #define ASSET_META_H
00038
00039 #include "pre_a.hpp"
00040
00041 #include "proc/asset.hpp"
00042 #include "common/factory.hpp"
00043
00044
00045
00046 namespace asset
00047 {
00048
00049 class Meta;
00050 class MetaFactory;
00051
00052
00053 template<>
00054 class ID<Meta> : public ID<Asset>
00055 {
00056 public:
00057 ID (size_t id);
00058 ID (const Meta&);
00059 };
00060
00061
00062
00067 class Meta : public Asset
00068 {
00069 public:
00070 static MetaFactory create;
00071
00072 virtual const ID<Meta>& getID() const
00073 {
00074 return static_cast<const ID<Meta>& > (Asset::getID());
00075 }
00076
00077 protected:
00078 Meta (const Asset::Ident& idi) : Asset(idi) {}
00079 friend class MetaFactory;
00080 };
00081
00082
00083
00084
00085
00086 inline ID<Meta>::ID(size_t id) : ID<Asset> (id) {};
00087 inline ID<Meta>::ID(const Meta& meta) : ID<Asset> (meta.getID()) {};
00088
00089
00090
00091
00095 class MetaFactory : public lumiera::Factory<asset::Meta>
00096 {
00097 public:
00098 typedef P<asset::Meta> PType;
00099
00100 PType operator() (Asset::Ident& key);
00101
00102 };
00103
00104
00105
00106
00107 }
00108 #endif