// $Id$
//
-// Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
moduleRegistry_.end());
}
+prefix_ void senf::ppi::ModuleManager::registerInitializable(Initializable & i)
+{
+ initQueue_.push_back(&i);
+ initRunner_.enable();
+ // This call ensures, that the senf::ppi::init() handler is called as next handler
+ // after this handler returns (this works since the senf::ppi::init() handler is registered as
+ // PRE hook and thus has very high priority)
+ senf::scheduler::yield();
+}
+
+prefix_ void senf::ppi::ModuleManager::unregisterInitializable(Initializable & i)
+{
+ initQueue_.erase(
+ std::remove(initQueue_.begin(), initQueue_.end(), & i),
+ initQueue_.end());
+ if (initQueue_.empty())
+ initRunner_.disable();
+}
+
+prefix_ bool senf::ppi::ModuleManager::initializableRegistered(Initializable const & i)
+ const
+{
+ return std::find(initQueue_.begin(), initQueue_.end(), &i) != initQueue_.end();
+}
+
prefix_ bool senf::ppi::ModuleManager::running()
const
{
return running_;
}
+///////////////////////////////////////////////////////////////////////////
+// senf::ppi::ModuleManager::Initializable
+
+prefix_ senf::ppi::ModuleManager::Initializable::Initializable()
+{
+ enqueueInitializable();
+}
+
+prefix_ senf::ppi::ModuleManager::Initializable::~Initializable()
+{
+ dequeueInitializable();
+}
+
+prefix_ void senf::ppi::ModuleManager::Initializable::enqueueInitializable()
+{
+ moduleManager().registerInitializable(*this);
+}
+
+prefix_ void senf::ppi::ModuleManager::Initializable::dequeueInitializable()
+{
+ moduleManager().unregisterInitializable(*this);
+}
+
+prefix_ bool senf::ppi::ModuleManager::Initializable::initializationScheduled()
+ const
+{
+ return moduleManager().initializableRegistered(*this);
+}
+
+prefix_ senf::ppi::ModuleManager::ModuleManager &
+senf::ppi::ModuleManager::Initializable::moduleManager()
+ const
+{
+ return ModuleManager::instance();
+}
+
///////////////////////////////cci.e///////////////////////////////////////
#undef prefix_