rubidium@10175: /* $Id$ */ rubidium@10175: rubidium@10429: /** @file fiber.hpp Base for all fiber related classes. */ rubidium@10175: rubidium@10175: #ifndef FIBER_HPP rubidium@10175: #define FIBER_HPP rubidium@10175: rubidium@10175: typedef void (CDECL *FiberFunc)(void *); rubidium@10175: rubidium@10175: class Fiber { rubidium@10175: public: rubidium@10175: /** rubidium@10175: * Switch to this fiber. rubidium@10175: */ rubidium@10175: virtual void SwitchToFiber() = 0; rubidium@10175: rubidium@10175: /** rubidium@10175: * Exit a fiber. rubidium@10175: */ rubidium@10175: virtual void Exit() = 0; rubidium@10175: rubidium@10175: /** rubidium@10175: * Check if a fiber is running. rubidium@10175: */ rubidium@10175: virtual bool IsRunning() = 0; rubidium@10175: rubidium@10175: /** rubidium@10175: * Get the 'param' data of the Fiber. rubidium@10175: */ rubidium@10175: virtual void *GetFiberData() = 0; rubidium@10175: rubidium@10175: /** rubidium@10175: * Virtual Destructor to mute warnings. rubidium@10175: */ rubidium@10175: virtual ~Fiber() {}; rubidium@10175: rubidium@10175: /** rubidium@10175: * Create a new fiber, calling proc(param) when running. rubidium@10175: */ rubidium@10175: static Fiber *New(FiberFunc proc, void *param); rubidium@10175: rubidium@10175: /** rubidium@10175: * Attach a current thread to a new fiber. rubidium@10175: */ rubidium@10175: static Fiber *AttachCurrent(void *param); rubidium@10175: rubidium@10175: /** rubidium@10175: * Get the 'param' data of the current active Fiber. rubidium@10175: */ rubidium@10175: static void *GetCurrentFiberData(); rubidium@10175: }; rubidium@10175: rubidium@10175: #endif /* FIBER_HPP */