// This file is distributed under the BSD License. // See "license.txt" for details. // Copyright 2009, Jonathan Turner (jturner@minnow-lang.org) // and Jason Turner (lefticus@gmail.com) // http://www.chaiscript.com #include #include "function_call.hpp" #include "chaiscript.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(); boost::function f = dispatchkit::build_functor (chai, "function(x, y) { return x + y }"); std::cout << "Functor call: " << f("Hello", " World") << std::endl; }