From fc2f5b2cd655f1391f2abda1b39e37cdec98a951 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 17 Oct 2003 15:35:43 +0000 Subject: Initial revision --- lib/base/init.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 lib/base/init.cpp (limited to 'lib/base/init.cpp') diff --git a/lib/base/init.cpp b/lib/base/init.cpp new file mode 100644 index 00000000..b9cf1dec --- /dev/null +++ b/lib/base/init.cpp @@ -0,0 +1,68 @@ +#include +#include +#include + +int eInit::rl=-1; +std::list > *eInit::cl; + +void eInit::add(int trl, eAutoInit *c) +{ + if (!cl) + cl=new std::list >; + cl->push_back(std::pair(trl, c)); + if (rl>=trl) + c->initNow(); +} + +void eInit::remove(int trl, eAutoInit *c) +{ + if (!cl) + return; + cl->remove(std::pair(trl, c)); + if (rl>=trl) + c->closeNow(); +} + +eInit::eInit() +{ +} + +eInit::~eInit() +{ + setRunlevel(-1); + delete cl; + cl=0; +} + +void eInit::setRunlevel(int nrl) +{ + while (nrl>rl) + { + rl++; + + for (std::list >::iterator i(cl->begin()); i!=cl->end(); ++i) + { + if ((*i).first == rl) + { + eDebug("+ (%d) %s", rl, (*i).second->getDescription()); + (*i).second->initNow(); + } + } + } + + while (nrl >::iterator i(cl->begin()); i!=cl->end(); ++i) + if ((*i).first == rl) + { + eDebug("- (%d) %s", rl, (*i).second->getDescription()); + (*i).second->closeNow(); + } + rl--; + } + eDebug("reached rl %d", rl); +} + +eAutoInit::~eAutoInit() +{ +} -- cgit v1.2.3