Added COROUTINE and DELEGATE class examples.
This commit is contained in:
parent
ca138b8e92
commit
cc6ca277e3
|
@ -0,0 +1,9 @@
|
||||||
|
CXXFLAGS = -I../.. -I../../boost
|
||||||
|
|
||||||
|
all: delegate_example coroutine_example
|
||||||
|
|
||||||
|
delegate_example: delegate_example.cpp
|
||||||
|
g++ -o $@ $^ $(CXXFLAGS)
|
||||||
|
|
||||||
|
coroutine_example: coroutine_example.cpp
|
||||||
|
g++ -o $@ $^ $(CXXFLAGS) -lboost_context
|
|
@ -0,0 +1,48 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <tool/coroutine.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
typedef COROUTINE<int, int> MyCoroutine;
|
||||||
|
|
||||||
|
class MyClass {
|
||||||
|
|
||||||
|
public:
|
||||||
|
int CountTo(int n)
|
||||||
|
{
|
||||||
|
printf("%s: Coroutine says hi. I will count from 1 to %d and yield each value.\n", __FUNCTION__, n);
|
||||||
|
for(int i = 1; i <= n; i++)
|
||||||
|
{
|
||||||
|
printf("%s: Yielding %d\n", __FUNCTION__, i);
|
||||||
|
cofunc.Yield(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Run()
|
||||||
|
{
|
||||||
|
cofunc = MyCoroutine (this, &MyClass::CountTo);
|
||||||
|
printf("%s: Calling coroutine that will count from 1 to 5.\n", __FUNCTION__);
|
||||||
|
cofunc.Call(5);
|
||||||
|
while (cofunc.Running())
|
||||||
|
{
|
||||||
|
printf("%s: Got value: %d\n", __FUNCTION__, cofunc.ReturnValue());
|
||||||
|
cofunc.Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%s: Done!\n", __FUNCTION__);
|
||||||
|
}
|
||||||
|
|
||||||
|
MyCoroutine cofunc;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
MyClass obj;
|
||||||
|
|
||||||
|
obj.Run();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <tool/delegate.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class MyClass {
|
||||||
|
|
||||||
|
public:
|
||||||
|
int MyMethod(const string &arg)
|
||||||
|
{
|
||||||
|
printf("MyClass(this = %p)::MyMethod() called with string '%s', length %d\n", this, arg.c_str(), arg.length());
|
||||||
|
return arg.length();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef DELEGATE<int, const string&> MyDelegate;
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
MyClass t1;
|
||||||
|
MyClass t2;
|
||||||
|
|
||||||
|
|
||||||
|
MyDelegate ptr1 (&t1, &MyClass::MyMethod);
|
||||||
|
MyDelegate ptr2 (&t2, &MyClass::MyMethod);
|
||||||
|
|
||||||
|
int retval1, retval2;
|
||||||
|
retval1 = ptr1("apples");
|
||||||
|
retval2 = ptr2("cherries");
|
||||||
|
|
||||||
|
printf("Object 1 returned %d, object 2 returned %d\n", retval1, retval2);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue