Move from boost::function to std::function

This commit is contained in:
Jason Turner
2011-09-10 09:37:40 -06:00
parent e2da56f199
commit c842bf14c1
16 changed files with 77 additions and 77 deletions

View File

@@ -377,10 +377,10 @@
/// \subsection functionobjects Function Objects /// \subsection functionobjects Function Objects
/// ///
/// Functions are first class objects in Chaiscript and ChaiScript supports automatic conversion /// Functions are first class objects in Chaiscript and ChaiScript supports automatic conversion
/// between ChaiScript functions and boost::function objects. /// between ChaiScript functions and std::function objects.
/// ///
/// \code /// \code
/// void callafunc(const boost::function<void (const std::string &)> &t_func) /// void callafunc(const std::function<void (const std::string &)> &t_func)
/// { /// {
/// t_func("bob"); /// t_func("bob");
/// } /// }
@@ -390,9 +390,9 @@
/// chaiscript::ChaiScript chai; /// chaiscript::ChaiScript chai;
/// chai.add(chaiscript::fun(&callafunc), "callafunc"); /// chai.add(chaiscript::fun(&callafunc), "callafunc");
/// chai("callafunc(fun(x) { print(x); })"); // pass a lambda function to the registered function /// chai("callafunc(fun(x) { print(x); })"); // pass a lambda function to the registered function
/// // which expects a typed boost::function /// // which expects a typed std::function
/// ///
/// boost::function<void ()> f = chai.eval<boost::function<void ()> >("dump_system"); /// std::function<void ()> f = chai.eval<std::function<void ()> >("dump_system");
/// f(); // call the ChaiScript function dump_system, from C++ /// f(); // call the ChaiScript function dump_system, from C++
/// } /// }
/// \endcode /// \endcode

View File

@@ -37,9 +37,9 @@ namespace chaiscript
/// ///
/// \param[in] f method pointer to bind /// \param[in] f method pointer to bind
/// \param[in] o object to bind as first parameter /// \param[in] o object to bind as first parameter
/// \returns a new boost::function object with one fewer parameters than the function passed in. /// \returns a new std::function object with one fewer parameters than the function passed in.
template<typename Ret, typename O, typename Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param) > template<typename Ret, typename O, typename Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param) >
boost::function<Ret (BOOST_PP_ENUM_PARAMS(n, Param))> std::function<Ret (BOOST_PP_ENUM_PARAMS(n, Param))>
bind_first(Ret (Class::*f)(BOOST_PP_ENUM_PARAMS(n, Param)), const O &o) bind_first(Ret (Class::*f)(BOOST_PP_ENUM_PARAMS(n, Param)), const O &o)
{ {
return boost::bind(boost::mem_fn(f), o BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, param, _)); return boost::bind(boost::mem_fn(f), o BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, param, _));
@@ -50,9 +50,9 @@ namespace chaiscript
/// ///
/// \param[in] f method pointer to bind /// \param[in] f method pointer to bind
/// \param[in] o object to bind as first parameter /// \param[in] o object to bind as first parameter
/// \returns a new boost::function object with one fewer parameters than the function passed in. /// \returns a new std::function object with one fewer parameters than the function passed in.
template<typename Ret, typename O, typename Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param) > template<typename Ret, typename O, typename Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param) >
boost::function<Ret (BOOST_PP_ENUM_PARAMS(n, Param))> std::function<Ret (BOOST_PP_ENUM_PARAMS(n, Param))>
bind_first(Ret (Class::*f)(BOOST_PP_ENUM_PARAMS(n, Param)) const, const O &o) bind_first(Ret (Class::*f)(BOOST_PP_ENUM_PARAMS(n, Param)) const, const O &o)
{ {
return boost::bind(boost::mem_fn(f), o BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, param, _)); return boost::bind(boost::mem_fn(f), o BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, param, _));
@@ -63,23 +63,23 @@ namespace chaiscript
/// ///
/// \param[in] f method pointer to bind /// \param[in] f method pointer to bind
/// \param[in] o object to bind as first parameter /// \param[in] o object to bind as first parameter
/// \returns a new boost::function object with one fewer parameters than the function passed in. /// \returns a new std::function object with one fewer parameters than the function passed in.
template<typename Ret,typename O BOOST_PP_COMMA_IF(m) BOOST_PP_ENUM_PARAMS(m, typename Param) > template<typename Ret,typename O BOOST_PP_COMMA_IF(m) BOOST_PP_ENUM_PARAMS(m, typename Param) >
boost::function<Ret (BOOST_PP_ENUM(n, param, Param))> std::function<Ret (BOOST_PP_ENUM(n, param, Param))>
bind_first(Ret (*f)(BOOST_PP_ENUM_PARAMS(m, Param)), const O &o) bind_first(Ret (*f)(BOOST_PP_ENUM_PARAMS(m, Param)), const O &o)
{ {
return boost::bind(f, o BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, param, _)); return boost::bind(f, o BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, param, _));
} }
/// \brief Helper function for binding the first parameter of a boost::function object. Used in chaiscript::fun overloads /// \brief Helper function for binding the first parameter of a std::function object. Used in chaiscript::fun overloads
/// that take 1 or 2 parameters to pre-bind to the function. /// that take 1 or 2 parameters to pre-bind to the function.
/// ///
/// \param[in] f method pointer to bind /// \param[in] f method pointer to bind
/// \param[in] o object to bind as first parameter /// \param[in] o object to bind as first parameter
/// \returns a new boost::function object with one fewer parameters than the function passed in. /// \returns a new std::function object with one fewer parameters than the function passed in.
template<typename Ret,typename O BOOST_PP_COMMA_IF(m) BOOST_PP_ENUM_PARAMS(m, typename Param) > template<typename Ret,typename O BOOST_PP_COMMA_IF(m) BOOST_PP_ENUM_PARAMS(m, typename Param) >
boost::function<Ret (BOOST_PP_ENUM(n, param, Param))> std::function<Ret (BOOST_PP_ENUM(n, param, Param))>
bind_first(const boost::function<Ret (BOOST_PP_ENUM_PARAMS(m, Param))> &f, const O &o) bind_first(const std::function<Ret (BOOST_PP_ENUM_PARAMS(m, Param))> &f, const O &o)
{ {
return boost::bind(f, o BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, param, _)); return boost::bind(f, o BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM(n, param, _));
} }

View File

@@ -355,7 +355,7 @@ namespace chaiscript
} }
template<typename Function> template<typename Function>
static boost::function<std::vector<Boxed_Value> (const dispatch::Proxy_Function_Base*)> return_boxed_value_vector(const Function &f) static std::function<std::vector<Boxed_Value> (const dispatch::Proxy_Function_Base*)> return_boxed_value_vector(const Function &f)
{ {
return boost::bind(&do_return_boxed_value_vector<Function>, f, _1); return boost::bind(&do_return_boxed_value_vector<Function>, f, _1);
} }
@@ -388,7 +388,7 @@ namespace chaiscript
m->add(constructor<std::runtime_error (const std::string &)>(), "runtime_error"); m->add(constructor<std::runtime_error (const std::string &)>(), "runtime_error");
m->add(fun(boost::function<std::string (const std::runtime_error &)>(&what)), "what"); m->add(fun(std::function<std::string (const std::runtime_error &)>(&what)), "what");
m->add(user_type<dispatch::Dynamic_Object>(), "Dynamic_Object"); m->add(user_type<dispatch::Dynamic_Object>(), "Dynamic_Object");
m->add(constructor<dispatch::Dynamic_Object (const std::string &)>(), "Dynamic_Object"); m->add(constructor<dispatch::Dynamic_Object (const std::string &)>(), "Dynamic_Object");

View File

@@ -227,10 +227,10 @@ namespace chaiscript
//In the interest of runtime safety for the m, we prefer the at() method for [] access, //In the interest of runtime safety for the m, we prefer the at() method for [] access,
//to throw an exception in an out of bounds condition. //to throw an exception in an out of bounds condition.
m->add( m->add(
fun(boost::function<typename ContainerType::reference (ContainerType *, int)> fun(std::function<typename ContainerType::reference (ContainerType *, int)>
(boost::mem_fn(static_cast<indexoper>(&ContainerType::at)))), "[]"); (boost::mem_fn(static_cast<indexoper>(&ContainerType::at)))), "[]");
m->add( m->add(
fun(boost::function<typename ContainerType::const_reference (const ContainerType *, int)> fun(std::function<typename ContainerType::const_reference (const ContainerType *, int)>
(boost::mem_fn(static_cast<constindexoper>(&ContainerType::at)))), "[]"); (boost::mem_fn(static_cast<constindexoper>(&ContainerType::at)))), "[]");
return m; return m;
@@ -255,7 +255,7 @@ namespace chaiscript
template<typename ContainerType> template<typename ContainerType>
ModulePtr container_type(const std::string &/*type*/, ModulePtr m = ModulePtr(new Module())) ModulePtr container_type(const std::string &/*type*/, ModulePtr m = ModulePtr(new Module()))
{ {
m->add(fun(boost::function<int (const ContainerType *)>(boost::mem_fn(&ContainerType::size))), "size"); m->add(fun(std::function<int (const ContainerType *)>(boost::mem_fn(&ContainerType::size))), "size");
m->add(fun<bool (ContainerType::*)() const>(&ContainerType::empty), "empty"); m->add(fun<bool (ContainerType::*)() const>(&ContainerType::empty), "empty");
m->add(fun<void (ContainerType::*)()>(&ContainerType::clear), "clear"); m->add(fun<void (ContainerType::*)()>(&ContainerType::clear), "clear");
@@ -390,7 +390,7 @@ namespace chaiscript
template<typename ContainerType> template<typename ContainerType>
ModulePtr unique_associative_container_type(const std::string &/*type*/, ModulePtr m = ModulePtr(new Module())) ModulePtr unique_associative_container_type(const std::string &/*type*/, ModulePtr m = ModulePtr(new Module()))
{ {
m->add(fun(boost::function<int (const ContainerType *, const typename ContainerType::key_type &)>(boost::mem_fn(&ContainerType::count))), "count"); m->add(fun(std::function<int (const ContainerType *, const typename ContainerType::key_type &)>(boost::mem_fn(&ContainerType::count))), "count");
return m; return m;
} }
@@ -513,7 +513,7 @@ namespace chaiscript
typedef typename String::size_type (String::*find_func_ptr)(const String &, typename String::size_type) const; typedef typename String::size_type (String::*find_func_ptr)(const String &, typename String::size_type) const;
typedef boost::function<int (const String *, const String &, int)> find_func; typedef std::function<int (const String *, const String &, int)> find_func;
m->add(fun(find_func(boost::mem_fn(static_cast<find_func_ptr>(&String::find)))), "find"); m->add(fun(find_func(boost::mem_fn(static_cast<find_func_ptr>(&String::find)))), "find");
m->add(fun(find_func(boost::mem_fn(static_cast<find_func_ptr>(&String::rfind)))), "rfind"); m->add(fun(find_func(boost::mem_fn(static_cast<find_func_ptr>(&String::rfind)))), "rfind");

View File

@@ -32,7 +32,7 @@ namespace chaiscript
/// \throws exception::bad_boxed_cast If the requested conversion is not possible /// \throws exception::bad_boxed_cast If the requested conversion is not possible
/// ///
/// boxed_cast will attempt to make conversions between value, &, *, std::shared_ptr, boost::reference_wrapper, /// boxed_cast will attempt to make conversions between value, &, *, std::shared_ptr, boost::reference_wrapper,
/// and boost::function (const and non-const) where possible. boxed_cast is used internally during function /// and std::function (const and non-const) where possible. boxed_cast is used internally during function
/// dispatch. This means that all of these conversions will be attempted automatically for you during /// dispatch. This means that all of these conversions will be attempted automatically for you during
/// ChaiScript function calls. /// ChaiScript function calls.
/// ///
@@ -43,7 +43,7 @@ namespace chaiscript
/// \li Boxed_Value constructed from std::shared_ptr or value types can be extracted as reference, /// \li Boxed_Value constructed from std::shared_ptr or value types can be extracted as reference,
/// pointer, value, or std::shared_ptr types /// pointer, value, or std::shared_ptr types
/// ///
/// Conversions to boost::function objects are attempted as well /// Conversions to std::function objects are attempted as well
/// ///
/// Example: /// Example:
/// \code /// \code
@@ -59,11 +59,11 @@ namespace chaiscript
/// const int &cir = chaiscript::boxed_cast<const int &>(bv); /// const int &cir = chaiscript::boxed_cast<const int &>(bv);
/// \endcode /// \endcode
/// ///
/// boost::function conversion example /// std::function conversion example
/// \code /// \code
/// chaiscript::ChaiScript chai; /// chaiscript::ChaiScript chai;
/// Boxed_Value bv = chai.eval("`+`"); // Get the functor for the + operator which is built in /// Boxed_Value bv = chai.eval("`+`"); // Get the functor for the + operator which is built in
/// boost::function<int (int, int)> f = chaiscript::boxed_cast<boost::function<int (int, int)> >(bv); /// std::function<int (int, int)> f = chaiscript::boxed_cast<std::function<int (int, int)> >(bv);
/// int i = f(2,3); /// int i = f(2,3);
/// assert(i == 5); /// assert(i == 5);
/// \endcode /// \endcode

View File

@@ -25,13 +25,13 @@ namespace chaiscript
/** /**
* Build a function caller that knows how to dispatch on a set of functions * Build a function caller that knows how to dispatch on a set of functions
* example: * example:
* boost::function<void (int)> f = * std::function<void (int)> f =
* build_function_caller(dispatchkit.get_function("print")); * build_function_caller(dispatchkit.get_function("print"));
* \returns A boost::function object for dispatching * \returns A std::function object for dispatching
* \param[in] funcs the set of functions to dispatch on. * \param[in] funcs the set of functions to dispatch on.
*/ */
template<typename FunctionType> template<typename FunctionType>
boost::function<FunctionType> std::function<FunctionType>
functor(const std::vector<Const_Proxy_Function> &funcs) functor(const std::vector<Const_Proxy_Function> &funcs)
{ {
FunctionType *p=0; FunctionType *p=0;
@@ -45,14 +45,14 @@ namespace chaiscript
* example: * example:
* void my_function(Proxy_Function f) * void my_function(Proxy_Function f)
* { * {
* boost::function<void (int)> local_f = * std::function<void (int)> local_f =
* build_function_caller(f); * build_function_caller(f);
* } * }
* \returns A boost::function object for dispatching * \returns A std::function object for dispatching
* \param[in] func A function to execute. * \param[in] func A function to execute.
*/ */
template<typename FunctionType> template<typename FunctionType>
boost::function<FunctionType> std::function<FunctionType>
functor(Const_Proxy_Function func) functor(Const_Proxy_Function func)
{ {
std::vector<Const_Proxy_Function> funcs; std::vector<Const_Proxy_Function> funcs;
@@ -65,7 +65,7 @@ namespace chaiscript
* and creating a typesafe C++ function caller from it. * and creating a typesafe C++ function caller from it.
*/ */
template<typename FunctionType> template<typename FunctionType>
boost::function<FunctionType> std::function<FunctionType>
functor(const Boxed_Value &bv) functor(const Boxed_Value &bv)
{ {
return functor<FunctionType>(boxed_cast<Const_Proxy_Function >(bv)); return functor<FunctionType>(boxed_cast<Const_Proxy_Function >(bv));
@@ -74,12 +74,12 @@ namespace chaiscript
namespace detail{ namespace detail{
/** /**
* Cast helper to handle automatic casting to const boost::function & * Cast helper to handle automatic casting to const std::function &
*/ */
template<typename Signature> template<typename Signature>
struct Cast_Helper<const boost::function<Signature> &> struct Cast_Helper<const std::function<Signature> &>
{ {
typedef boost::function<Signature> Result_Type; typedef std::function<Signature> Result_Type;
static Result_Type cast(const Boxed_Value &ob) static Result_Type cast(const Boxed_Value &ob)
{ {
@@ -87,18 +87,18 @@ namespace chaiscript
{ {
return dispatch::functor<Signature>(ob); return dispatch::functor<Signature>(ob);
} else { } else {
return Cast_Helper_Inner<const boost::function<Signature> &>::cast(ob); return Cast_Helper_Inner<const std::function<Signature> &>::cast(ob);
} }
} }
}; };
/** /**
* Cast helper to handle automatic casting to boost::function * Cast helper to handle automatic casting to std::function
*/ */
template<typename Signature> template<typename Signature>
struct Cast_Helper<boost::function<Signature> > struct Cast_Helper<std::function<Signature> >
{ {
typedef boost::function<Signature> Result_Type; typedef std::function<Signature> Result_Type;
static Result_Type cast(const Boxed_Value &ob) static Result_Type cast(const Boxed_Value &ob)
{ {
@@ -106,18 +106,18 @@ namespace chaiscript
{ {
return dispatch::functor<Signature>(ob); return dispatch::functor<Signature>(ob);
} else { } else {
return Cast_Helper_Inner<boost::function<Signature> >::cast(ob); return Cast_Helper_Inner<std::function<Signature> >::cast(ob);
} }
} }
}; };
/** /**
* Cast helper to handle automatic casting to const boost::function * Cast helper to handle automatic casting to const std::function
*/ */
template<typename Signature> template<typename Signature>
struct Cast_Helper<const boost::function<Signature> > struct Cast_Helper<const std::function<Signature> >
{ {
typedef boost::function<Signature> Result_Type; typedef std::function<Signature> Result_Type;
static Result_Type cast(const Boxed_Value &ob) static Result_Type cast(const Boxed_Value &ob)
{ {
@@ -125,7 +125,7 @@ namespace chaiscript
{ {
return dispatch::functor<Signature>(ob); return dispatch::functor<Signature>(ob);
} else { } else {
return Cast_Helper_Inner<const boost::function<Signature> >::cast(ob); return Cast_Helper_Inner<const std::function<Signature> >::cast(ob);
} }
} }
}; };

View File

@@ -90,7 +90,7 @@ namespace chaiscript
* used internally for unwrapping a function call's types * used internally for unwrapping a function call's types
*/ */
template<typename Ret BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param) > template<typename Ret BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param) >
boost::function<Ret (BOOST_PP_ENUM_PARAMS(n, Param)) > std::function<Ret (BOOST_PP_ENUM_PARAMS(n, Param)) >
build_function_caller_helper(Ret (BOOST_PP_ENUM_PARAMS(n, Param)), const std::vector<Const_Proxy_Function> &funcs) build_function_caller_helper(Ret (BOOST_PP_ENUM_PARAMS(n, Param)), const std::vector<Const_Proxy_Function> &funcs)
{ {
if (funcs.size() == 1) if (funcs.size() == 1)

View File

@@ -70,7 +70,7 @@ namespace chaiscript
Proxy_Function build_constructor_(Class (*)(BOOST_PP_ENUM_PARAMS(n, Param))) Proxy_Function build_constructor_(Class (*)(BOOST_PP_ENUM_PARAMS(n, Param)))
{ {
typedef std::shared_ptr<Class> (sig)(BOOST_PP_ENUM_PARAMS(n, Param)); typedef std::shared_ptr<Class> (sig)(BOOST_PP_ENUM_PARAMS(n, Param));
return Proxy_Function(new Proxy_Function_Impl<sig>(boost::function<sig>(&(constructor_<Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, Param)>)))); return Proxy_Function(new Proxy_Function_Impl<sig>(std::function<sig>(&(constructor_<Class BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, Param)>))));
} }
} }
} }

View File

@@ -207,7 +207,7 @@ namespace chaiscript
{ {
public: public:
Dynamic_Proxy_Function( Dynamic_Proxy_Function(
const boost::function<Boxed_Value (const std::vector<Boxed_Value> &)> &t_f, const std::function<Boxed_Value (const std::vector<Boxed_Value> &)> &t_f,
int t_arity=-1, int t_arity=-1,
const AST_NodePtr &t_parsenode = AST_NodePtr(), const AST_NodePtr &t_parsenode = AST_NodePtr(),
const std::string &t_description = "", const std::string &t_description = "",
@@ -304,7 +304,7 @@ namespace chaiscript
return types; return types;
} }
boost::function<Boxed_Value (const std::vector<Boxed_Value> &)> m_f; std::function<Boxed_Value (const std::vector<Boxed_Value> &)> m_f;
int m_arity; int m_arity;
std::string m_description; std::string m_description;
Proxy_Function m_guard; Proxy_Function m_guard;
@@ -440,14 +440,14 @@ namespace chaiscript
/** /**
* The standard typesafe function call implementation of Proxy_Function * The standard typesafe function call implementation of Proxy_Function
* It takes a boost::function<> object and performs runtime * It takes a std::function<> object and performs runtime
* type checking of Boxed_Value parameters, in a type safe manner * type checking of Boxed_Value parameters, in a type safe manner
*/ */
template<typename Func> template<typename Func>
class Proxy_Function_Impl : public Proxy_Function_Base class Proxy_Function_Impl : public Proxy_Function_Base
{ {
public: public:
Proxy_Function_Impl(const boost::function<Func> &f) Proxy_Function_Impl(const std::function<Func> &f)
: Proxy_Function_Base(detail::build_param_type_list(static_cast<Func *>(0))), : Proxy_Function_Base(detail::build_param_type_list(static_cast<Func *>(0))),
m_f(f), m_dummy_func(0) m_f(f), m_dummy_func(0)
{ {
@@ -483,7 +483,7 @@ namespace chaiscript
return ""; return "";
} }
boost::function<Func> internal_function() const std::function<Func> internal_function() const
{ {
return m_f; return m_f;
} }
@@ -491,11 +491,11 @@ namespace chaiscript
protected: protected:
virtual Boxed_Value do_call(const std::vector<Boxed_Value> &params) const virtual Boxed_Value do_call(const std::vector<Boxed_Value> &params) const
{ {
return detail::Do_Call<typename boost::function<Func>::result_type>::go(m_f, params); return detail::Do_Call<typename std::function<Func>::result_type>::go(m_f, params);
} }
private: private:
boost::function<Func> m_f; std::function<Func> m_f;
Func *m_dummy_func; Func *m_dummy_func;
}; };

View File

@@ -88,7 +88,7 @@ namespace chaiscript
* the bad_boxed_cast is passed up to the caller. * the bad_boxed_cast is passed up to the caller.
*/ */
template<typename Ret BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param)> template<typename Ret BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename Param)>
Ret call_func(const boost::function<Ret (BOOST_PP_ENUM_PARAMS(n, Param))> &f, Ret call_func(const std::function<Ret (BOOST_PP_ENUM_PARAMS(n, Param))> &f,
const std::vector<Boxed_Value> &params) const std::vector<Boxed_Value> &params)
{ {
if (params.size() != n) if (params.size() != n)
@@ -137,7 +137,7 @@ namespace chaiscript
struct Do_Call struct Do_Call
{ {
template<typename Fun> template<typename Fun>
static Boxed_Value go(const boost::function<Fun> &fun, const std::vector<Boxed_Value> &params) static Boxed_Value go(const std::function<Fun> &fun, const std::vector<Boxed_Value> &params)
{ {
return Handle_Return<Ret>::handle(call_func(fun, params)); return Handle_Return<Ret>::handle(call_func(fun, params));
} }
@@ -147,7 +147,7 @@ namespace chaiscript
struct Do_Call<void> struct Do_Call<void>
{ {
template<typename Fun> template<typename Fun>
static Boxed_Value go(const boost::function<Fun> &fun, const std::vector<Boxed_Value> &params) static Boxed_Value go(const std::function<Fun> &fun, const std::vector<Boxed_Value> &params)
{ {
call_func(fun, params); call_func(fun, params);
return Handle_Return<void>::handle(); return Handle_Return<void>::handle();

View File

@@ -31,7 +31,7 @@ namespace chaiscript
return Proxy_Function( return Proxy_Function(
new Proxy_Function_Impl< new Proxy_Function_Impl<
typename boost::function_types::function_type<boost::function_types::components<T> >::type> ( typename boost::function_types::function_type<boost::function_types::components<T> >::type> (
boost::function< std::function<
typename boost::function_types::function_type<boost::function_types::components<T> >::type typename boost::function_types::function_type<boost::function_types::components<T> >::type
>(t))); >(t)));
} }
@@ -46,7 +46,7 @@ namespace chaiscript
return Proxy_Function( return Proxy_Function(
new Proxy_Function_Impl< new Proxy_Function_Impl<
typename boost::function_types::function_type<boost::function_types::components<T> >::type> ( typename boost::function_types::function_type<boost::function_types::components<T> >::type> (
boost::function< std::function<
typename boost::function_types::function_type<boost::function_types::components<T> >::type typename boost::function_types::function_type<boost::function_types::components<T> >::type
>(boost::mem_fn(t)))); >(boost::mem_fn(t))));
} }
@@ -65,19 +65,19 @@ namespace chaiscript
} }
} }
/// \brief Creates a new Proxy_Function object from a boost::function object /// \brief Creates a new Proxy_Function object from a std::function object
/// \param[in] f boost::function to expose to ChaiScript /// \param[in] f std::function to expose to ChaiScript
/// ///
/// \b Example: /// \b Example:
/// \code /// \code
/// boost::function<int (char, float, std::string)> f = get_some_function(); /// std::function<int (char, float, std::string)> f = get_some_function();
/// chaiscript::ChaiScript chai; /// chaiscript::ChaiScript chai;
/// chai.add(fun(f), "some_function"); /// chai.add(fun(f), "some_function");
/// \endcode /// \endcode
/// ///
/// \sa \ref addingfunctions /// \sa \ref addingfunctions
template<typename T> template<typename T>
Proxy_Function fun(const boost::function<T> &f) Proxy_Function fun(const std::function<T> &f)
{ {
return Proxy_Function(new dispatch::Proxy_Function_Impl<T>(f)); return Proxy_Function(new dispatch::Proxy_Function_Impl<T>(f));
} }

View File

@@ -1147,7 +1147,7 @@ namespace chaiscript
virtual ~Attr_Decl_AST_Node() {} virtual ~Attr_Decl_AST_Node() {}
virtual Boxed_Value eval_internal(chaiscript::detail::Dispatch_Engine &t_ss){ virtual Boxed_Value eval_internal(chaiscript::detail::Dispatch_Engine &t_ss){
try { try {
t_ss.add(fun(boost::function<Boxed_Value (dispatch::Dynamic_Object &)>(boost::bind(&dispatch::detail::Dynamic_Object_Attribute::func, this->children[0]->text, t_ss.add(fun(std::function<Boxed_Value (dispatch::Dynamic_Object &)>(boost::bind(&dispatch::detail::Dynamic_Object_Attribute::func, this->children[0]->text,
this->children[1]->text, _1))), this->children[1]->text); this->children[1]->text, _1))), this->children[1]->text);
} }

View File

@@ -40,7 +40,7 @@ void hello_constructor(const chaiscript::Boxed_Value & /*o*/)
struct System struct System
{ {
std::map<std::string, boost::function<std::string (const std::string &) > > m_callbacks; std::map<std::string, std::function<std::string (const std::string &) > > m_callbacks;
void add_callback(const std::string &t_name, void add_callback(const std::string &t_name,
const chaiscript::Proxy_Function &t_func) const chaiscript::Proxy_Function &t_func)
@@ -52,7 +52,7 @@ struct System
void do_callbacks(const std::string &inp) void do_callbacks(const std::string &inp)
{ {
log("Running Callbacks: " + inp); log("Running Callbacks: " + inp);
for (std::map<std::string, boost::function<std::string (const std::string &)> >::iterator itr = m_callbacks.begin(); for (std::map<std::string, std::function<std::string (const std::string &)> >::iterator itr = m_callbacks.begin();
itr != m_callbacks.end(); itr != m_callbacks.end();
++itr) ++itr)
{ {
@@ -87,7 +87,7 @@ int main(int /*argc*/, char * /*argv*/[]) {
// Let's use chaiscript to add a new lambda callback to our system. // Let's use chaiscript to add a new lambda callback to our system.
// The function "{ 'Callback1' + x }" is created in chaiscript and passed into our C++ application // The function "{ 'Callback1' + x }" is created in chaiscript and passed into our C++ application
// in the "add_callback" function of struct System the chaiscript function is converted into a // in the "add_callback" function of struct System the chaiscript function is converted into a
// boost::function, so it can be handled and called easily and type-safely // std::function, so it can be handled and called easily and type-safely
chai.eval("system.add_callback(\"#1\", fun(x) { \"Callback1 \" + x });"); chai.eval("system.add_callback(\"#1\", fun(x) { \"Callback1 \" + x });");
// Because we are sharing the "system" object with the chaiscript engine we have equal // Because we are sharing the "system" object with the chaiscript engine we have equal
@@ -108,14 +108,14 @@ int main(int /*argc*/, char * /*argv*/[]) {
// A shortcut to using eval is just to use the chai operator() // A shortcut to using eval is just to use the chai operator()
chai("log(\"Test Module\", \"Test Message\");"); chai("log(\"Test Module\", \"Test Message\");");
//Finally, it is possible to register any boost::function as a system function, in this //Finally, it is possible to register any std::function as a system function, in this
//way, we can, for instance add a bound member function to the system //way, we can, for instance add a bound member function to the system
chai.add(fun(&System::do_callbacks, boost::ref(system), std::string("Bound Test")), "do_callbacks"); chai.add(fun(&System::do_callbacks, boost::ref(system), std::string("Bound Test")), "do_callbacks");
//Call bound version of do_callbacks //Call bound version of do_callbacks
chai("do_callbacks()"); chai("do_callbacks()");
boost::function<void ()> caller = chai.eval<boost::function<void ()> >("fun() { system.do_callbacks(\"From Functor\"); }"); std::function<void ()> caller = chai.eval<std::function<void ()> >("fun() { system.do_callbacks(\"From Functor\"); }");
caller(); caller();
@@ -139,7 +139,7 @@ int main(int /*argc*/, char * /*argv*/[]) {
//To do: Add examples of handling Boxed_Values directly when needed //To do: Add examples of handling Boxed_Values directly when needed
//Creating a functor on the stack and using it immediatly //Creating a functor on the stack and using it immediatly
int x = chai.eval<boost::function<int (int, int)> >("fun (x, y) { return x + y; }")(5, 6); int x = chai.eval<std::function<int (int, int)> >("fun (x, y) { return x + y; }")(5, 6);
log("Functor test output", boost::lexical_cast<std::string>(x)); log("Functor test output", boost::lexical_cast<std::string>(x));
@@ -165,7 +165,7 @@ int main(int /*argc*/, char * /*argv*/[]) {
//Dynamic objects test //Dynamic objects test
chai.add(chaiscript::Proxy_Function(new dispatch::detail::Dynamic_Object_Function("TestType", fun(&hello_world))), "hello_world"); chai.add(chaiscript::Proxy_Function(new dispatch::detail::Dynamic_Object_Function("TestType", fun(&hello_world))), "hello_world");
chai.add(chaiscript::Proxy_Function(new dispatch::detail::Dynamic_Object_Constructor("TestType", fun(&hello_constructor))), "TestType"); chai.add(chaiscript::Proxy_Function(new dispatch::detail::Dynamic_Object_Constructor("TestType", fun(&hello_constructor))), "TestType");
chai.add(fun(boost::function<Boxed_Value (dispatch::Dynamic_Object &)>(boost::bind(&dispatch::detail::Dynamic_Object_Attribute::func, "TestType", "attr", _1))), "attr"); chai.add(fun(std::function<Boxed_Value (dispatch::Dynamic_Object &)>(boost::bind(&dispatch::detail::Dynamic_Object_Attribute::func, "TestType", "attr", _1))), "attr");
chai.eval("var x = TestType()"); chai.eval("var x = TestType()");
// chai.eval("x.attr = \"hi\""); // chai.eval("x.attr = \"hi\"");

View File

@@ -52,7 +52,7 @@ void version(int){
std::cout << "chai: compiled " << __TIME__ << " " << __DATE__ << std::endl; std::cout << "chai: compiled " << __TIME__ << " " << __DATE__ << std::endl;
} }
bool throws_exception(const boost::function<void ()> &f) bool throws_exception(const std::function<void ()> &f)
{ {
try { try {
f(); f();
@@ -63,7 +63,7 @@ bool throws_exception(const boost::function<void ()> &f)
return false; return false;
} }
chaiscript::exception::eval_error get_eval_error(const boost::function<void ()> &f) chaiscript::exception::eval_error get_eval_error(const std::function<void ()> &f)
{ {
try { try {
f(); f();
@@ -113,7 +113,7 @@ void interactive(chaiscript::ChaiScript& chai)
//Then, we try to print the result of the evaluation to the user //Then, we try to print the result of the evaluation to the user
if (!val.get_type_info().bare_equal(chaiscript::user_type<void>())) { if (!val.get_type_info().bare_equal(chaiscript::user_type<void>())) {
try { try {
std::cout << chai.eval<boost::function<std::string (const chaiscript::Boxed_Value &bv)> >("to_string")(val) << std::endl; std::cout << chai.eval<std::function<std::string (const chaiscript::Boxed_Value &bv)> >("to_string")(val) << std::endl;
} }
catch (...) {} //If we can't, do nothing catch (...) {} //If we can't, do nothing
} }

View File

@@ -1,6 +1,6 @@
#include <chaiscript/utility/utility.hpp> #include <chaiscript/utility/utility.hpp>
double test_call(const boost::function<double (int)> &f, int val) double test_call(const std::function<double (int)> &f, int val)
{ {
return f(val); return f(val);
} }

View File

@@ -7,15 +7,15 @@ int main()
chai.eval("def func() { print(\"Hello World\"); } "); chai.eval("def func() { print(\"Hello World\"); } ");
boost::function<void ()> f = chai.eval<boost::function<void ()> >("func"); std::function<void ()> f = chai.eval<std::function<void ()> >("func");
f(); f();
if (chai.eval<boost::function<std::string (int)> >("to_string")(6) != "6") if (chai.eval<std::function<std::string (int)> >("to_string")(6) != "6")
{ {
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (chai.eval<boost::function<std::string (const chaiscript::Boxed_Value &)> >("to_string")(chaiscript::var(6)) == "6") if (chai.eval<std::function<std::string (const chaiscript::Boxed_Value &)> >("to_string")(chaiscript::var(6)) == "6")
{ {
return EXIT_SUCCESS; return EXIT_SUCCESS;
} else { } else {