CMS 3D CMS Logo

Public Member Functions | Private Attributes

LogicFactory< Ilogic, Identifier, LogicCreator > Class Template Reference

#include <LogicFactory.h>

List of all members.

Public Member Functions

Ilogic * CreateObject (const Identifier &id)
bool Register (const Identifier &id, LogicCreator creator)
bool Unregister (const Identifier &id)

Private Attributes

std::map< Identifier,
LogicCreator > 
m_associations

Detailed Description

template<class Ilogic, typename Identifier, typename LogicCreator = Ilogic * (*)()>
class LogicFactory< Ilogic, Identifier, LogicCreator >

Author:
Andres Osorio

email: aosorio@uniandes.edu.co

Date:
2008-10-11

Definition at line 21 of file LogicFactory.h.


Member Function Documentation

template<class Ilogic, typename Identifier, typename LogicCreator = Ilogic * (*)()>
Ilogic* LogicFactory< Ilogic, Identifier, LogicCreator >::CreateObject ( const Identifier &  id) [inline]

Definition at line 39 of file LogicFactory.h.

Referenced by LogicTool< RBCLogic >::retrieve().

  {
    typename std::map<Identifier, LogicCreator>::const_iterator itr;
    itr = m_associations.find( id );
    
    if ( itr != m_associations.end() )  {
      return ( itr->second )();
    } else return NULL; // handle error
  }
template<class Ilogic, typename Identifier, typename LogicCreator = Ilogic * (*)()>
bool LogicFactory< Ilogic, Identifier, LogicCreator >::Register ( const Identifier &  id,
LogicCreator  creator 
) [inline]

Definition at line 24 of file LogicFactory.h.

Referenced by LogicTool< RBCLogic >::initialise().

  {
    return m_associations.insert(typename std::map<Identifier, LogicCreator>::value_type(id,creator)).second;
  }
template<class Ilogic, typename Identifier, typename LogicCreator = Ilogic * (*)()>
bool LogicFactory< Ilogic, Identifier, LogicCreator >::Unregister ( const Identifier &  id) [inline]

Definition at line 29 of file LogicFactory.h.

Referenced by LogicTool< RBCLogic >::endjob().

  {
    typename std::map<Identifier, LogicCreator>::const_iterator itr;
    itr = m_associations.find(id);
    if( itr != m_associations.end() ) {
      delete ( itr->second )() ;
    }
    return m_associations.erase(id) == 1;
  }

Member Data Documentation

template<class Ilogic, typename Identifier, typename LogicCreator = Ilogic * (*)()>
std::map<Identifier, LogicCreator> LogicFactory< Ilogic, Identifier, LogicCreator >::m_associations [private]