BOSS 7.0.1
BESIII Offline Software System
Loading...
Searching...
No Matches
ers::IssueFactory Class Reference

Factory for all Issues. More...

#include <IssueFactory.h>

Public Types

typedef Issue *(* CreateIssueCallback) ()
 
typedef std::map< std::string, CreateIssueCallbackCallbackMap
 
typedef Issue *(* CreateIssueCallback) ()
 
typedef std::map< std::string, CreateIssueCallbackCallbackMap
 

Public Member Functions

bool register_issue (const std::string &name, CreateIssueCallback creator)
 register an issue factory
 
Issuebuild (const std::string &name) const
 build an empty issue out of a name
 
Issuebuild (const std::string &name, const string_map_type *values) const
 build a issue out of name and set values
 
Issuebuild (const Issue *original)
 build a clone of an issue
 
void write_to (std::ostream &stream) const
 writes description to stream
 
bool register_issue (const std::string &name, CreateIssueCallback creator)
 register an issue factory
 
Issuebuild (const std::string &name) const
 build an empty issue out of a name
 
Issuebuild (const std::string &name, const string_map_type *values) const
 build a issue out of name and set values
 
Issuebuild (const Issue *original)
 build a clone of an issue
 
void write_to (std::ostream &stream) const
 writes description to stream
 

Static Public Member Functions

static IssueFactoryinstance ()
 method to access singleton
 
static void print_registered ()
 prints all registered issue types
 
static IssueFactoryinstance ()
 method to access singleton
 
static void print_registered ()
 prints all registered issue types
 

Protected Member Functions

 IssueFactory ()
 
 IssueFactory ()
 

Protected Attributes

CallbackMap m_factory_map
 

Static Protected Attributes

static IssueFactorys_factory = 0
 

Detailed Description

Factory for all Issues.

This class implements the factory pattern for Issues. The main responsability of this class is to keep track of the existing types of Issues Each issue should register one factory method for instances of this class. This is needed for deserializing of Issues.

Author
Matthias Wiesmann
Version
1.0

Definition at line 31 of file Event/ers/ers-00-00-03/ers/IssueFactory.h.

Member Typedef Documentation

◆ CallbackMap [1/2]

typedef std::map<std::string,CreateIssueCallback> ers::IssueFactory::CallbackMap

Definition at line 34 of file Event/ers/ers-00-00-03/ers/IssueFactory.h.

◆ CallbackMap [2/2]

typedef std::map<std::string,CreateIssueCallback> ers::IssueFactory::CallbackMap

Definition at line 34 of file InstallArea/include/ers/ers/IssueFactory.h.

◆ CreateIssueCallback [1/2]

typedef Issue *(* ers::IssueFactory::CreateIssueCallback) ()

Definition at line 33 of file Event/ers/ers-00-00-03/ers/IssueFactory.h.

◆ CreateIssueCallback [2/2]

typedef Issue *(* ers::IssueFactory::CreateIssueCallback) ()

Definition at line 33 of file InstallArea/include/ers/ers/IssueFactory.h.

Constructor & Destructor Documentation

◆ IssueFactory() [1/2]

ers::IssueFactory::IssueFactory ( )
protected

Definition at line 21 of file IssueFactory.cxx.

21{}

◆ IssueFactory() [2/2]

ers::IssueFactory::IssueFactory ( )
protected

Member Function Documentation

◆ build() [1/6]

ers::Issue * ers::IssueFactory::build ( const Issue original)

build a clone of an issue

Clones an Issue. This method creates (using the other build methods) an new Issue with the same value table

Parameters
originalthe Issue to be cloned
Returns
a new cloned Issued
Note
The problem of cause exception is not handled yet.

Definition at line 91 of file IssueFactory.cxx.

91 {
92 ERS_PRE_CHECK_PTR(original);
93 const std::string name = original->get_class_name() ;
94 const ers::string_map_type *values = original->get_value_table();
95 ERS_ASSERT(values!=0,"null value table for original");
96 ers::Issue *clone_issue = build(name,values);
97 return clone_issue ;
98}// build
#define ERS_ASSERT(expr,...)
Issue * build(const std::string &name) const
build an empty issue out of a name
std::map< std::string, std::string > string_map_type

◆ build() [2/6]

Issue * ers::IssueFactory::build ( const Issue original)

build a clone of an issue

◆ build() [3/6]

ers::Issue * ers::IssueFactory::build ( const std::string &  name) const

build an empty issue out of a name

Builds an issue out of the name it was registered with

Parameters
namethe name used to indentify the class
Returns
an newly allocated instance of type name or DefaultIssue
Note
If the requested type cannot be resolved an instance of type DefaultIssue

Definition at line 57 of file IssueFactory.cxx.

57 {
58 CallbackMap::const_iterator i = m_factory_map.find(name);
59 if (i == m_factory_map.end()) {
60 // throw ERS_ISSUE_FACTORY_ERROR(name,"issue not registred") ;
61 return new DefaultIssue(name);
62 } // Not found
63 ers::Issue *issue = (i->second)() ;
64 if (0==issue) {
65 throw ERS_ISSUE_FACTORY_ERROR(name,"factory function returned null");
66 } // issue null
67 return issue ;
68} // build
#define ERS_ISSUE_FACTORY_ERROR(name, message)

Referenced by ers::Issue::clone().

◆ build() [4/6]

Issue * ers::IssueFactory::build ( const std::string &  name) const

build an empty issue out of a name

◆ build() [5/6]

ers::Issue * ers::IssueFactory::build ( const std::string &  name,
const string_map_type values 
) const

build a issue out of name and set values

Builds an issue out of a name and a value table

Parameters
namethe name used to indentify the class
valuesthe value-table containing the state for the Issue
Returns
an newly allocated instance of this type or null if the name is not registered

Definition at line 76 of file IssueFactory.cxx.

76 {
77 Issue *i = build(name);
78 if (i) {
79 i->set_values(*values);
80 } // if i
81 return i ;
82} // build

◆ build() [6/6]

Issue * ers::IssueFactory::build ( const std::string &  name,
const string_map_type values 
) const

build a issue out of name and set values

◆ instance() [1/2]

ers::IssueFactory * ers::IssueFactory::instance ( )
static

method to access singleton

Finds the singleton instance of the factory. If the instance is not allocated yet, it is.

Returns
a pointer to the singleton instance

Definition at line 28 of file IssueFactory.cxx.

28 {
29 if (0==s_factory) {
30 s_factory = new IssueFactory();
31 } // creation needed
32 return s_factory ;
33} // instance

Referenced by ers::Issue::clone().

◆ instance() [2/2]

static IssueFactory * ers::IssueFactory::instance ( )
static

method to access singleton

◆ print_registered() [1/2]

void ers::IssueFactory::print_registered ( )
static

prints all registered issue types

Definition at line 35 of file IssueFactory.cxx.

35 {
37 std::cerr << *factory;
38} //print_registered_issues
efhlt::Interface * factory(void)
Definition: factory.cxx:17
static IssueFactory * instance()
method to access singleton

◆ print_registered() [2/2]

static void ers::IssueFactory::print_registered ( )
static

prints all registered issue types

◆ register_issue() [1/2]

bool ers::IssueFactory::register_issue ( const std::string &  name,
CreateIssueCallback  creator 
)

register an issue factory

Register an issue type with the factory

Parameters
namethe name that will be used to lookup new instances
creatora pointer to the function used to create new instance for that particular type of function
Returns
true if the name was already present in the table

Definition at line 47 of file IssueFactory.cxx.

47 {
48 return m_factory_map.insert(CallbackMap::value_type(name,creator)).second;
49} // register_Issue

◆ register_issue() [2/2]

bool ers::IssueFactory::register_issue ( const std::string &  name,
CreateIssueCallback  creator 
)

register an issue factory

◆ write_to() [1/2]

void ers::IssueFactory::write_to ( std::ostream &  stream) const

writes description to stream

Definition at line 100 of file IssueFactory.cxx.

100 {
101 stream << "Issue factory - registered issues\n" ;
102 stream << "---------------------------------\n" ;
103 int i = 0 ;
104 for(CallbackMap::const_iterator pos=m_factory_map.begin();pos!=m_factory_map.end();++pos) {
105 std::string name = pos->first;
106 stream << i << ")\t" << name << std::endl;
107 i++ ;
108 } // for
109 stream << "---------------------------------\n" ;
110} //

◆ write_to() [2/2]

void ers::IssueFactory::write_to ( std::ostream &  stream) const

writes description to stream

Member Data Documentation

◆ m_factory_map

CallbackMap ers::IssueFactory::m_factory_map
protected

Definition at line 37 of file Event/ers/ers-00-00-03/ers/IssueFactory.h.

◆ s_factory

static IssueFactory * ers::IssueFactory::s_factory = 0
staticprotected

Definition at line 38 of file Event/ers/ers-00-00-03/ers/IssueFactory.h.


The documentation for this class was generated from the following files: