00001 #ifndef __EMCCALFEMFACTORY_H__
00002 #define __EMCCALFEMFACTORY_H__
00003
00004 class emcCalFEM;
00005 #include "PHTimeStamp.h"
00006 #include <iostream>
00007 #include <string>
00008 #include <map>
00009
00017 class emcCalFEMFactory
00018 {
00019 public:
00020
00021 typedef emcCalFEM* (*Creator)(int absolutePosition,
00022 const PHTimeStamp& start,
00023 const PHTimeStamp& end,
00024 bool isDefault);
00025 typedef std::map<std::string,Creator> CreatorMap;
00026
00028 static emcCalFEM*
00029 Create(const char* category,
00030 int absPosition,
00031 const PHTimeStamp& start=PHTimeStamp(),
00032 const PHTimeStamp& end=PHTimeStamp(PHTimeStamp::PHFarFuture));
00033
00034
00035
00036
00037
00039 static emcCalFEM*
00040 CreateDefault(const char* category,
00041 int absPosition,
00042 const PHTimeStamp& start=PHTimeStamp(),
00043 const PHTimeStamp& end=PHTimeStamp(PHTimeStamp::PHFarFuture));
00044
00046 static void print(std::ostream& out = std::cout);
00047
00049
00050
00051
00052 static bool registerCreator(const char* category,
00053 Creator creator);
00054 private:
00055
00056 static emcCalFEM* create(const char* category,
00057 int absPosition,
00058 const PHTimeStamp& start,
00059 const PHTimeStamp& end,
00060 bool isDefault);
00061
00062 static CreatorMap& fCreators();
00063 };
00064
00065 #endif