00001 /* 00002 * IssueFactory.h 00003 * ers 00004 * 00005 * Created by Matthias Wiesmann on 30.11.04. 00006 * Copyright 2004 CERN. All rights reserved. 00007 * 00008 */ 00009 00010 #ifndef ERS_ISSUE_FACTORY 00011 #define ERS_ISSUE_FACTORY 00012 00013 #include <string> 00014 #include <map> 00015 #include "ers/Core.h" 00016 00017 namespace ers { 00018 00019 class Issue ; 00020 00031 class IssueFactory { 00032 public: 00033 typedef Issue* (*CreateIssueCallback)(); 00034 typedef std::map<std::string,CreateIssueCallback> CallbackMap ; 00035 protected: 00036 IssueFactory(); 00037 CallbackMap m_factory_map ; 00038 static IssueFactory *s_factory ; 00039 00040 public: 00041 static IssueFactory *instance() ; 00042 static void print_registered(); 00043 bool register_issue(const std::string &name, CreateIssueCallback creator) ; 00044 Issue *build(const std::string &name) const ; 00045 Issue *build(const std::string &name, const string_map_type *values) const ; 00046 Issue *build(const Issue *original); 00047 void write_to(std::ostream& stream) const ; 00048 } ; // IssueFactory 00049 00050 std::ostream& operator<<(std::ostream&, const IssueFactory& factory); 00052 } // ers 00053 00054 #endif 00055