Move from boost::function to std::function
This commit is contained in:
@@ -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
|
||||||
|
@@ -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, _));
|
||||||
}
|
}
|
||||||
|
@@ -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");
|
||||||
|
@@ -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");
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)>))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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> ¶ms) const
|
virtual Boxed_Value do_call(const std::vector<Boxed_Value> ¶ms) 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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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> ¶ms)
|
const std::vector<Boxed_Value> ¶ms)
|
||||||
{
|
{
|
||||||
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> ¶ms)
|
static Boxed_Value go(const std::function<Fun> &fun, const std::vector<Boxed_Value> ¶ms)
|
||||||
{
|
{
|
||||||
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> ¶ms)
|
static Boxed_Value go(const std::function<Fun> &fun, const std::vector<Boxed_Value> ¶ms)
|
||||||
{
|
{
|
||||||
call_func(fun, params);
|
call_func(fun, params);
|
||||||
return Handle_Return<void>::handle();
|
return Handle_Return<void>::handle();
|
||||||
|
@@ -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));
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -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\"");
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
||||||
|
Reference in New Issue
Block a user