diff options
Diffstat (limited to 'include/tool/examples')
-rw-r--r-- | include/tool/examples/Makefile | 9 | ||||
-rw-r--r-- | include/tool/examples/coroutine_example.cpp | 49 | ||||
-rw-r--r-- | include/tool/examples/delegate_example.cpp | 34 |
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; +} |