summaryrefslogtreecommitdiff
path: root/libs/context/example/execution_context/parameter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/context/example/execution_context/parameter.cpp')
-rw-r--r--libs/context/example/execution_context/parameter.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/libs/context/example/execution_context/parameter.cpp b/libs/context/example/execution_context/parameter.cpp
new file mode 100644
index 000000000..c33de7382
--- /dev/null
+++ b/libs/context/example/execution_context/parameter.cpp
@@ -0,0 +1,55 @@
+
+// Copyright Oliver Kowalke 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <cstdlib>
+#include <exception>
+#include <iostream>
+#include <string>
+
+#include <boost/context/all.hpp>
+#include <boost/lexical_cast.hpp>
+
+class X{
+private:
+ int * inp_;
+ std::string outp_;
+ std::exception_ptr excptr_;
+ boost::context::execution_context caller_;
+ boost::context::execution_context callee_;
+
+public:
+ X():
+ inp_( nullptr),
+ outp_(),
+ excptr_(),
+ caller_(boost::context::execution_context::current()),
+ callee_(boost::context::fixedsize_stack(),
+ [=](){
+ try {
+ int i = * inp_;
+ outp_ = boost::lexical_cast<std::string>(i);
+ caller_.resume();
+ } catch (...) {
+ excptr_=std::current_exception();
+ }
+ })
+ {}
+
+ std::string operator()(int i){
+ inp_ = & i;
+ callee_.resume();
+ if(excptr_){
+ std::rethrow_exception(excptr_);
+ }
+ return outp_;
+ }
+};
+
+int main() {
+ X x;
+ std::cout<<x(7)<<std::endl;
+ std::cout << "done" << std::endl;
+}