00001 // Emacs -*- C++ -*- 00002 #ifndef ANAPHE_ANALYSISFACTORY 00003 #define ANAPHE_ANALYSISFACTORY 1 00004 00005 #include <string> 00006 #include "AIDA_Dev/IDevAnalysisFactory.h" 00007 00008 namespace AIDA { 00009 class ITupleFactory; 00010 class ITreeFactory; 00011 class IHistogramFactory; 00012 class IDataPointSetFactory; 00013 class IFunctionFactory; 00014 class ITree; 00015 class IPlotterFactory; 00016 class IFitFactory; 00017 00018 namespace Dev { 00019 class IStoreFactory; 00020 class IHistogramFactoryProvider; 00021 class IDataPointSetFactoryProvider; 00022 class ITreeFactoryProvider; 00023 class ITupleFactoryProvider; 00024 } 00025 } 00026 00027 namespace Anaphe { 00028 namespace AIDA_AnalysisFactory_native { 00029 00031 00032 class AIDA_AnalysisFactory : public virtual AIDA::Dev::IDevAnalysisFactory 00033 { 00034 public: 00036 AIDA_AnalysisFactory(); 00038 ~AIDA_AnalysisFactory(); 00039 00041 bool registerStoreFactory( AIDA::Dev::IStoreFactory* factory, 00042 const std::string & storeType ); 00043 AIDA::Dev::IStoreFactory* storeFactory( const std::string & storeType ); 00044 bool registerAnnotationFactory( AIDA::Dev::IAnnotationFactory* factory ); 00045 AIDA::Dev::IAnnotationFactory* annotationFactory(); 00046 bool registerHistogramFactoryProvider( AIDA::Dev::IHistogramFactoryProvider* provider ); 00047 AIDA::Dev::IHistogramFactoryProvider* histogramFactoryProvider(); 00048 bool registerDataPointSetFactoryProvider( AIDA::Dev::IDataPointSetFactoryProvider* provider ); 00049 AIDA::Dev::IDataPointSetFactoryProvider* dataPointSetFactoryProvider(); 00050 bool registerTreeFactoryProvider( AIDA::Dev::ITreeFactoryProvider* provider ); 00051 AIDA::Dev::ITreeFactoryProvider* treeFactoryProvider(); 00052 bool registerTupleFactoryProvider( AIDA::Dev::ITupleFactoryProvider* provider ); 00053 AIDA::Dev::ITupleFactoryProvider* tupleFactoryProvider(); 00054 bool registerFunctionFactoryProvider( AIDA::Dev::IFunctionFactoryProvider* provider ); 00055 AIDA::Dev::IFunctionFactoryProvider* functionFactoryProvider(); 00056 bool registerFitFactoryProvider( AIDA::Dev::IFitFactoryProvider* provider ); 00057 AIDA::Dev::IFitFactoryProvider* fitFactoryProvider(); 00058 bool registerPlotterFactoryProvider( AIDA::Dev::IPlotterFactoryProvider* provider ); 00059 AIDA::Dev::IPlotterFactoryProvider* plotterFactoryProvider(); 00060 00062 AIDA::ITreeFactory * createTreeFactory(); 00063 AIDA::IHistogramFactory * createHistogramFactory( AIDA::ITree& tree ); 00064 AIDA::IDataPointSetFactory * createDataPointSetFactory( AIDA::ITree& tree ); 00065 AIDA::ITupleFactory * createTupleFactory( AIDA::ITree& tree ); 00066 AIDA::IFunctionFactory * createFunctionFactory( AIDA::ITree& tree ); 00067 AIDA::IPlotterFactory * createPlotterFactory( int argc = 0, 00068 char** args = 0 ); 00069 AIDA::IFitFactory * createFitFactory(); 00070 00071 private: 00072 static bool firstInstance; 00073 static std::string* m_storeFactoryTypes; 00074 static AIDA::Dev::IStoreFactory** m_storeFactories; 00075 static unsigned int m_numberOfStoreTypes; 00076 static AIDA::Dev::IAnnotationFactory* m_annotationFactory; 00077 static AIDA::Dev::IHistogramFactoryProvider* m_histogramFactoryProvider; 00078 static AIDA::Dev::IDataPointSetFactoryProvider* m_dataPointSetFactoryProvider; 00079 static AIDA::Dev::ITreeFactoryProvider* m_treeFactoryProvider; 00080 static AIDA::Dev::ITupleFactoryProvider* m_tupleFactoryProvider; 00081 static AIDA::Dev::IFunctionFactoryProvider* m_functionFactoryProvider; 00082 static AIDA::Dev::IFitFactoryProvider* m_fitFactoryProvider; 00083 static AIDA::Dev::IPlotterFactoryProvider* m_plotterFactoryProvider; 00084 }; 00085 00086 } 00087 } 00088 00089 #endif /* ifndef ANAPHE_ANALYSISFACTORY */