diff --git a/chaiscript/CMakeLists.txt b/chaiscript/CMakeLists.txt index 5c9d9636..2008632e 100644 --- a/chaiscript/CMakeLists.txt +++ b/chaiscript/CMakeLists.txt @@ -15,6 +15,9 @@ if(Boost_FOUND) add_executable(chaiscript_test main.cpp) target_link_libraries(chaiscript_test ${Boost_LIBRARIES}) + add_executable(chaiscript_callbacktest callbacktest.cpp) + target_link_libraries(chaiscript_callbacktest ${Boost_LIBRARIES}) + endif() diff --git a/chaiscript/callbacktest.cpp b/chaiscript/callbacktest.cpp new file mode 100644 index 00000000..9a3007bb --- /dev/null +++ b/chaiscript/callbacktest.cpp @@ -0,0 +1,57 @@ +#include + +#include "chaiscript.hpp" +#include "function_call.hpp" +#include + +struct Callback_Handler +{ + typedef std::vector, + boost::function > > Callbacks; + + Callbacks m_callbacks; + + void add_callbacks(boost::shared_ptr t_name, + boost::shared_ptr t_value) + { + m_callbacks.push_back( + std::make_pair(dispatchkit::build_function_caller(t_name), + dispatchkit::build_function_caller(t_value) + ) + ); + } + + void do_callbacks() + { + int i=1; + for (Callbacks::iterator itr = m_callbacks.begin(); + itr != m_callbacks.end(); + ++itr) + { + std::cout << "Name: " << itr->first() << " = " << itr->second(i) << std::endl; + ++i; + } + } +}; + +int main(int argc, char *argv[]) { + + chaiscript::ChaiScript_Engine chai; + + Callback_Handler cb_handler; + chai.get_eval_engine().add_object("cb_handler", boost::ref(cb_handler)); + dispatchkit::register_function(chai.get_eval_engine(), &Callback_Handler::add_callbacks, "add_callbacks"); + + for (int i = 1; i < argc; ++i) { + try { + dispatchkit::Boxed_Value val = chai.evaluate_file(argv[i]); + } + catch (std::exception &e) { + std::cerr << "Could not open: " << argv[i] << std::endl; + exit(1); + } + } + + cb_handler.do_callbacks(); +} + diff --git a/samples/callbacks.chai b/samples/callbacks.chai new file mode 100644 index 00000000..ec8acaca --- /dev/null +++ b/samples/callbacks.chai @@ -0,0 +1,7 @@ +cb_handler.add_callbacks( function() { "First"; }, function (x) { x * 1.1; } ); +cb_handler.add_callbacks( function() { "TimesThree"; }, function (x) { x * 3.0001; } ); +cb_handler.add_callbacks( function() { "DivOnePtTwo"; }, function (x) { x / 1.2; } ); + + + +