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