summaryrefslogtreecommitdiff
path: root/include/tool/examples
diff options
context:
space:
mode:
Diffstat (limited to 'include/tool/examples')
-rw-r--r--include/tool/examples/Makefile9
-rw-r--r--include/tool/examples/coroutine_example.cpp49
-rw-r--r--include/tool/examples/delegate_example.cpp34
3 files changed, 92 insertions, 0 deletions
diff --git a/include/tool/examples/Makefile b/include/tool/examples/Makefile
new file mode 100644
index 0000000..a605263
--- /dev/null
+++ b/include/tool/examples/Makefile
@@ -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 \ No newline at end of file
diff --git a/include/tool/examples/coroutine_example.cpp b/include/tool/examples/coroutine_example.cpp
new file mode 100644
index 0000000..c36de8b
--- /dev/null
+++ b/include/tool/examples/coroutine_example.cpp
@@ -0,0 +1,49 @@
+#include <cstdio>
+#include <string>
+
+#include <tool/coroutine.h>
+
+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;
+}
diff --git a/include/tool/examples/delegate_example.cpp b/include/tool/examples/delegate_example.cpp
new file mode 100644
index 0000000..3d3c782
--- /dev/null
+++ b/include/tool/examples/delegate_example.cpp
@@ -0,0 +1,34 @@
+#include <cstdio>
+#include <string>
+
+#include <tool/delegate.h>
+
+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;
+}