another directory rename: failstar -> fail

"failstar" sounds like a name for a cruise liner from the 80s.  As "*" isn't a
desirable part of directory names, just name the whole thing "fail/", the core
parts being stored in "fail/core/".

Additionally fixing two build system dependency issues:
 - missing jobserver -> protomessages dependency
 - broken bochs -> fail dependency (add_custom_target DEPENDS only allows plain
   file dependencies ... cmake for the win)


git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@956 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
hsc
2012-03-08 19:43:02 +00:00
commit b70b6fb43a
921 changed files with 473161 additions and 0 deletions

View File

@ -0,0 +1,78 @@
#ifndef __COROUTINE_MANAGER_HPP__
#define __COROUTINE_MANAGER_HPP__
// Author: Adrian Böckenkamp
// Date: 05.10.2011
#include <map>
#include <stack>
#include <pcl.h> // the underlying "portable coroutine library"
namespace fi
{
class ExperimentFlow;
/**
* \class CoroutineManager
* Manages the experiments flow encapsulated in coroutines. Each
* experiment (flow) has it's associated data structure which is
* represented by the ExperimentData-class.
*/
class CoroutineManager
{
private:
//! the default stack size for coroutines (= experiment flows)
static const unsigned STACK_SIZE_DEFAULT = 4096*4096;
//! the abstraction for coroutine identification
typedef coroutine_t corohandle_t;
typedef std::map<ExperimentFlow*,corohandle_t> flowmap_t;
//! the mapping "flows <-> coro-handle"
flowmap_t m_Flows;
//! the simulator/backend coroutine handle
corohandle_t m_simCoro;
//! stack of coroutines that explicitly activated another one with toggle()
std::stack<corohandle_t> m_togglerstack;
//! manages the run-calls for each ExperimentFlow-object
static void m_invoke(void* pData);
public:
static const ExperimentFlow* SIM_FLOW; //!< the simulator coroutine flow
CoroutineManager() : m_simCoro(co_current()) { }
~CoroutineManager();
/**
* Creates a new coroutine for the specified experiment flow.
* @param flow the flow to be executed in the newly created coroutine
*/
void create(ExperimentFlow* flow);
/**
* Destroys coroutine for the specified experiment flow.
* @param flow the flow to be removed
*/
void remove(ExperimentFlow* flow);
/**
* Switches the control flow to the experiment \a flow. If \a flow is
* equal to \c SIM_FLOW, the control will be handed back to the
* simulator. The current control flow is pushed onto an
* internal stack.
* @param flow the destination control flow or \c SIM_FLOW (= \c NULL )
*/
void toggle(ExperimentFlow* flow);
/**
* Gives the control back to the coroutine that toggle()d the
* current one, by drawing from the internal stack built from
* calls to toggle().
*/
void resume();
/**
* Retrieves the current (active) coroutine (= flow).
* @return the current experiment flow.
*/
ExperimentFlow* getCurrent();
};
} // end-of-namespace: fi
#endif /* __COROUTINE_MANAGER_HPP__ */