jccl::DependencyManager Class Reference

A dependency checker for dynamically added components. More...

#include <jccl/RTRC/DependencyManager.h>

Collaboration diagram for jccl::DependencyManager:

Collaboration graph
[legend]
List of all members.

Public Member Functions

void registerChecker (DepChecker *checker)
 Registers a new dependency checker.
bool isSatisfied (ConfigElementPtr element)
 Checks if dependencies are satisfied for the given element.
void debugOutDependencies (ConfigElementPtr element, int dbg_lvl)
 Prints information about element's dependencies.

Private Member Functions

 DependencyManager ()
 Constructor.
DepCheckerfindDepChecker (ConfigElementPtr element)
 Finds a DepChecker that can handle element.
void debugDump ()
 Prints information about the DependencyManager's state to vprDEBUG.
 vprSingletonHeader (DependencyManager)

Private Attributes

std::vector< DepChecker * > mDepCheckers
 List of dependency checkers.
DepChecker mDefaultChecker
 Default dependency checker.

Detailed Description

A dependency checker for dynamically added components.

The Dependency Manager works in conjunction with the Config Manager, and checks for dependencies for any configuration add request. The default behavior is to simply check the Config Manager's active list for all jccl::ConfigElement objects that the request's jccl::ConfigElement refers to. However, additional DepCheckers can be registered to provide specialized functionality.

Note that this class is a singleton, primarily so that the master list of DepCheckers can be appended to by any entity in the system.

See also:
jccl::ConfigManager

Definition at line 61 of file DependencyManager.h.


Constructor & Destructor Documentation

jccl::DependencyManager::DependencyManager (  )  [private]

Constructor.

Private since this is a singleton.

Definition at line 47 of file DependencyManager.cpp.

References mDepCheckers.

00047                                     : mDepCheckers(), mDefaultChecker()
00048 {
00049    mDepCheckers = std::vector<DepChecker*>(0);
00050    //debugDump();
00051 }


Member Function Documentation

void jccl::DependencyManager::registerChecker ( DepChecker checker  ) 

Registers a new dependency checker.

Definition at line 54 of file DependencyManager.cpp.

References debugDump(), jccl::DepChecker::getCheckerName(), jcclDBG_RECONFIG(), and mDepCheckers.

00055 {
00056    vprASSERT(checker != NULL);
00057    mDepCheckers.push_back(checker);       // Add the checker to the list
00058    vprDEBUG(jcclDBG_RECONFIG, vprDBG_CONFIG_LVL)
00059       << "DependencyManager: Registered: "
00060       << std::setiosflags(std::ios::right) << std::setw(25)
00061       << std::setfill(' ') << checker->getCheckerName().c_str()
00062       << std::resetiosflags(std::ios::right)
00063       << "  type: " << typeid(*checker).name() << std::endl
00064       << vprDEBUG_FLUSH;
00065    debugDump();
00066 }

bool jccl::DependencyManager::isSatisfied ( ConfigElementPtr  element  ) 

Checks if dependencies are satisfied for the given element.

Returns:
true iff dependencies for element are satisfied.

Definition at line 69 of file DependencyManager.cpp.

References findDepChecker().

Referenced by jccl::ConfigElementHandler::configProcessPending(), and jccl::ConfigManager::scanForLostDependencies().

00070 {
00071    vprASSERT(NULL != element.get());
00072    DepChecker* checker = findDepChecker(element);
00073    return checker->depSatisfied(element);
00074 }

void jccl::DependencyManager::debugOutDependencies ( ConfigElementPtr  element,
int  dbg_lvl 
)

Prints information about element's dependencies.

Definition at line 77 of file DependencyManager.cpp.

References findDepChecker().

Referenced by jccl::ConfigElementHandler::configProcessPending().

00079 {
00080    vprASSERT(NULL != element.get());
00081    DepChecker* checker = findDepChecker(element);
00082    checker->debugOutDependencies(element,dbg_lvl);
00083 }

DepChecker * jccl::DependencyManager::findDepChecker ( ConfigElementPtr  element  )  [private]

Finds a DepChecker that can handle element.

DepCheckers list the jccl::ConfigElement types that they know how to handle; this is checked versus element.getDefToken().

Returns:
A DepChecker that knows how to handle element. If no specific checker is found, the default checker is returned. If multiple specific DepCheckers claim to be able to handle element, the choice is implementation dependent.

Definition at line 86 of file DependencyManager.cpp.

References mDefaultChecker, and mDepCheckers.

Referenced by debugOutDependencies(), and isSatisfied().

00087 {
00088    vprASSERT(NULL != element.get());
00089 
00090    //std::string element_type;
00091    //element_type = (std::string)element->getType();
00092 
00093    for(unsigned int i=0;i<mDepCheckers.size();i++)
00094    {
00095       // Get next constructor
00096       DepChecker* checker = mDepCheckers[i];
00097       vprASSERT(checker != NULL);
00098 
00099       if(checker->canHandle(element))
00100       {
00101          return checker;
00102       }
00103    }
00104 
00105    return &mDefaultChecker;
00106 }

void jccl::DependencyManager::debugDump (  )  [private]

Prints information about the DependencyManager's state to vprDEBUG.

Definition at line 109 of file DependencyManager.cpp.

References jcclDBG_RECONFIG(), and mDepCheckers.

Referenced by registerChecker().

00110 {
00111    //vprDEBUG_BEGIN(jcclDBG_RECONFIG, jcclDBG_CONFIG_LVL) << "DependencyManager::debugDump\n" << vprDEBUG_FLUSH;
00112    vprDEBUG_BEGIN(jcclDBG_RECONFIG, vprDBG_STATE_LVL)
00113       << "----- Current dependency checkers -----\n" << vprDEBUG_FLUSH;
00114    vprDEBUG_NEXT(jcclDBG_RECONFIG, vprDBG_STATE_LVL)
00115       << "num checkers:" << mDepCheckers.size() << "\n"
00116       << vprDEBUG_FLUSH;
00117    vprDEBUG_NEXT(jcclDBG_RECONFIG, vprDBG_STATE_LVL)
00118       << "-1: Checker: default   type: default checker  recog: all (this is a fallback)\n"
00119       << vprDEBUG_FLUSH;
00120 
00121    for(unsigned int cNum=0;cNum<mDepCheckers.size();cNum++)
00122    {
00123       DepChecker* checker = mDepCheckers[cNum];
00124       vprDEBUG_NEXT(jcclDBG_RECONFIG, vprDBG_STATE_LVL)
00125          << cNum << ": Checker:" << (void*)checker
00126          << "   type:" << typeid(*checker).name()
00127          << "   recog:" << checker->getCheckerName().c_str()
00128          << "\n" << vprDEBUG_FLUSH;
00129    }
00130 
00131    vprDEBUG_END(jcclDBG_RECONFIG, vprDBG_STATE_LVL)
00132       << "---------------------\n" << vprDEBUG_FLUSH;
00133 }

jccl::DependencyManager::vprSingletonHeader ( DependencyManager   )  [private]


Member Data Documentation

std::vector<DepChecker*> jccl::DependencyManager::mDepCheckers [private]

List of dependency checkers.

Definition at line 99 of file DependencyManager.h.

Referenced by debugDump(), DependencyManager(), findDepChecker(), and registerChecker().

DepChecker jccl::DependencyManager::mDefaultChecker [private]

Default dependency checker.

Definition at line 102 of file DependencyManager.h.

Referenced by findDepChecker().


The documentation for this class was generated from the following files:
Generated on Thu Jan 4 10:49:55 2007 for JCCL: Juggler Configuration and Control Library by  doxygen 1.5.1