Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

WvCont Class Reference

WvCont provides "continuations", which are apparently also known as semi-coroutines. More...

#include <wvcont.h>

List of all members.

Public Methods

 WvCont (const WvContCallback &cb, unsigned long stacksize=64 *1024)
 Construct a WvCont using an existing WvCallback. More...

 WvCont (const WvCont &cb)
 Copy constructor.

 ~WvCont ()
 Destructor.

void * operator() (void *p1=0)
 call the callback, making p1 the return value of yield() or the parameter to the function, and returning Ret, the argument of yield() or the return value of the function.


Static Public Methods

WvCont current ()
 Get a copy of the current WvCont.

void * yield (void *ret=0)
 "return" from the current callback, giving value 'ret' to the person who called us. More...

bool isok ()
 Tell us if the current context is "okay", that is, not trying to die. More...

template<typename R, typename T> R c_bouncer (T t, void *_cont)
 A templated function that allows you to pass a WvCont wherever a C-style function pointer of the form R func(T, void *userdata) is taken. More...

template<typename R> R c_bouncer (void *_cont)
 A templated function that allows you to pass a WvCont wherever a C-style function pointer of the form R func(void *userdata) is taken. More...


Friends

struct Data


Detailed Description

WvCont provides "continuations", which are apparently also known as semi-coroutines.

You can wrap any WvCallback<void*,void*> in a WvCont and make it a "continuable" callback - that is, you can yield() from it and return a value. Next time someone calls your callback, it will be as if yield() has returned (and the parameter to your function is returned from yield()).

Definition at line 27 of file wvcont.h.


Constructor & Destructor Documentation

WvCont::WvCont const WvContCallback &    cb,
unsigned long    stacksize = 64 *1024
 

Construct a WvCont using an existing WvCallback.

The WvCont object can be used in place of that callback, and stored in a callback of the same data type.

Definition at line 54 of file wvcont.cc.

Referenced by current().


Member Function Documentation

void * WvCont::yield void *    ret = 0 [static]
 

"return" from the current callback, giving value 'ret' to the person who called us.

Next time this callback is called, it's as if yield() had returned, and the parameter to the callback is the value of yield().

Definition at line 165 of file wvcont.cc.

References isok().

Referenced by WvStream::continue_select().

bool WvCont::isok   [static]
 

Tell us if the current context is "okay", that is, not trying to die.

If !isok(), you shouldn't yield(), because the caller is just going to keep calling you until you die. Return as soon as you can.

Definition at line 181 of file wvcont.cc.

Referenced by current(), and yield().

template<typename R, typename T>
R WvCont::c_bouncer   t,
void *    _cont
[inline, static]
 

A templated function that allows you to pass a WvCont wherever a C-style function pointer of the form R func(T, void *userdata) is taken.

It's your job to make sure the 'userdata' provided is a pointer to the right WvCont.

Example: typedef bool MyFunc(Obj *obj, void *userdata); WvCont cont; MyFunc *func = &WvCont::c_bouncer<bool,Obj *>; bool b = func(new Obj, &cont);

Definition at line 127 of file wvcont.h.

template<typename R>
R WvCont::c_bouncer void *    _cont [inline, static]
 

A templated function that allows you to pass a WvCont wherever a C-style function pointer of the form R func(void *userdata) is taken.

It's your job to make sure the 'userdata' provided is a pointer to the right WvCont.

Example: typedef bool MyFunc(void *userdata); WvCont cont; MyFunc *func = &WvCont::c_bouncer<bool>; bool b = func(&cont);

Definition at line 148 of file wvcont.h.


The documentation for this class was generated from the following files:
Generated on Tue May 24 05:22:49 2005 for WvStreams by doxygen1.2.15