/******************************************************************* * * DESCRIPTION: class ParallelProcessorAdmin * * AUTHOR: Alejandro Troccoli * * EMAIL: mailto://atroccol@dc.uba.ar * * DATE: 29/9/2000 * *******************************************************************/ #ifndef __PPROCESSOR_ADMIN_H #define __PPROCESSOR_ADMIN_H /** include files **/ #include #include #include "pprocess.h" // ProcId //define JACKY_DEBUG macro and the jacky debug fstream #include "JackyDebugStream.h" /** forward declarations **/ class Model; class RootModel; class NodeCoordinatorModel; class FlatCoordinatorModel; class Atomic; class Coupled; class CoupledCell ; class FlatCoupledCell; class SingleParallelProcessorAdmin ; class ParallelRoot ; class ParallelProcessor ; /** declarations **/ class ParallelProcessorAdmin { public: #ifdef JACKY_DEBUG typedef map< ProcId, ParallelProcessor *, less< ProcId > > ProcessorDB ; typedef map< ProcId, Model *, less > ProcessorModelDB; #endif ~ParallelProcessorAdmin() ; // Destructor ParallelProcessor &generateProcessor( Atomic * , const ProcId); ParallelProcessor &generateProcessor( Coupled *, const ProcId); ParallelProcessor &generateProcessor( CoupledCell *, const ProcId); ParallelProcessor &generateProcessor( FlatCoupledCell *, const ProcId); ParallelProcessor &generateRoot( RootModel *, const ProcId); ParallelProcessor &generateNodeCoordinator( NodeCoordinatorModel *, const ProcId); // Still pending: add NC model to database ParallelProcessor &generateFlatCoordinator( FlatCoordinatorModel *, const ProcId); // Still pending: add FC model to database ParallelProcessor &processor( const ProcId & ) ; ParallelProcessor &processor( const string & ) ; void model( const ProcId &, Model *); Model &model( const ProcId &); #ifdef JACKY_REVISION //this function is used to search a specified ProcId in the ProcessorDB, if found, it returns true; otherwise, //it returns false. This is useful when we want to identify whether a received message was sent from a local //or remote source. [see Message::asStringReceived() for more information] bool findProcId(const ProcId &); #endif void showProcessors( ostream &out = cout); static const ProcId rootId ; static const ProcId ncBaseId ; const ProcId newId() {return procIdCount++;} #ifdef JACKY_DEBUG ProcessorDB &getProcessorDB(); //retieve a reference to the ProcessorDB for debugging purpose #endif private: friend class SingleParallelProcessorAdmin ; friend class ParallelRoot ; #ifndef JACKY_DEBUG typedef map< ProcId, ParallelProcessor *, less< ProcId > > ProcessorDB ; typedef map< ProcId, Model *, less > ProcessorModelDB; #endif ProcessorDB procDB ; ProcessorModelDB procModelDB; ProcId procIdCount ; ParallelProcessorAdmin(); // Default constructor ParallelProcessorAdmin &add2DB( ParallelProcessor *newProc, const ProcId &newId ) ; }; // class ParallelProcessorAdmin class SingleParallelProcessorAdmin { public: static ParallelProcessorAdmin &Instance() ; private: static ParallelProcessorAdmin *instance ; } ; /** inline **/ inline ParallelProcessorAdmin &SingleParallelProcessorAdmin::Instance() { if( !instance ) { instance = new ParallelProcessorAdmin(); } return *instance; } #endif //__PPROCESSOR_ADMIN_H