More C++11/C++14 updates

This commit is contained in:
Jason Turner
2016-03-11 18:17:04 -07:00
parent 6f01568a9a
commit 16c4a11990
4 changed files with 15 additions and 75 deletions

View File

@@ -312,7 +312,7 @@ namespace chaiscript
bool call_match(const std::vector<Boxed_Value> &vals, const Type_Conversions_State &t_conversions) const override bool call_match(const std::vector<Boxed_Value> &vals, const Type_Conversions_State &t_conversions) const override
{ {
return std::any_of(m_funcs.cbegin(), m_funcs.cend(), return std::any_of(std::begin(m_funcs), std::end(m_funcs),
[&vals, &t_conversions](const Proxy_Function &f){ return f->call_match(vals, t_conversions); }); [&vals, &t_conversions](const Proxy_Function &f){ return f->call_match(vals, t_conversions); });
} }
@@ -911,7 +911,7 @@ namespace chaiscript
return false; return false;
} }
return std::any_of(std::cbegin(t_funs), std::cend(t_funs), return std::any_of(std::begin(t_funs), std::end(t_funs),
[&](const auto &fun) { [&](const auto &fun) {
return fun->is_attribute_function() && fun->compare_first_type(t_params[0], t_conversions); return fun->is_attribute_function() && fun->compare_first_type(t_params[0], t_conversions);
} }

View File

@@ -35,8 +35,7 @@ namespace chaiscript
/// \returns A std::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>
std::function<FunctionType> std::function<FunctionType> functor(const std::vector<Const_Proxy_Function> &funcs, const Type_Conversions_State *t_conversions)
functor(const std::vector<Const_Proxy_Function> &funcs, const Type_Conversions_State *t_conversions)
{ {
const bool has_arity_match = std::any_of(funcs.begin(), funcs.end(), const bool has_arity_match = std::any_of(funcs.begin(), funcs.end(),
[](const Const_Proxy_Function &f) { [](const Const_Proxy_Function &f) {
@@ -63,8 +62,7 @@ namespace chaiscript
/// \returns A std::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>
std::function<FunctionType> std::function<FunctionType> functor(Const_Proxy_Function func, const Type_Conversions_State *t_conversions)
functor(Const_Proxy_Function func, const Type_Conversions_State *t_conversions)
{ {
return functor<FunctionType>(std::vector<Const_Proxy_Function>({std::move(func)}), t_conversions); return functor<FunctionType>(std::vector<Const_Proxy_Function>({std::move(func)}), t_conversions);
} }
@@ -72,8 +70,7 @@ namespace chaiscript
/// Helper for automatically unboxing a Boxed_Value that contains a function object /// Helper for automatically unboxing a Boxed_Value that contains a function object
/// and creating a typesafe C++ function caller from it. /// and creating a typesafe C++ function caller from it.
template<typename FunctionType> template<typename FunctionType>
std::function<FunctionType> std::function<FunctionType> functor(const Boxed_Value &bv, const Type_Conversions_State *t_conversions)
functor(const Boxed_Value &bv, const Type_Conversions_State *t_conversions)
{ {
return functor<FunctionType>(boxed_cast<Const_Proxy_Function >(bv, t_conversions), t_conversions); return functor<FunctionType>(boxed_cast<Const_Proxy_Function >(bv, t_conversions), t_conversions);
} }

View File

@@ -59,13 +59,8 @@ namespace chaiscript
}; };
template<typename Ret> template<typename Ret>
struct Handle_Return<std::function<Ret>> struct Handle_Return<std::function<Ret>> : Handle_Return<const std::function<Ret> &>
{ {
static Boxed_Value handle(const std::function<Ret> &f) {
return Boxed_Value(
chaiscript::make_shared<dispatch::Proxy_Function_Base, dispatch::Proxy_Function_Callable_Impl<Ret, std::function<Ret>>>(f)
);
}
}; };
template<typename Ret> template<typename Ret>
@@ -79,23 +74,13 @@ namespace chaiscript
}; };
template<typename Ret> template<typename Ret>
struct Handle_Return<const std::shared_ptr<std::function<Ret>> &> struct Handle_Return<const std::shared_ptr<std::function<Ret>> &> : Handle_Return<const std::shared_ptr<std::function<Ret>>>
{ {
static Boxed_Value handle(const std::shared_ptr<std::function<Ret>> &f) {
return Boxed_Value(
chaiscript::make_shared<dispatch::Proxy_Function_Base, dispatch::Assignable_Proxy_Function_Impl<Ret>>(std::ref(*f),f)
);
}
}; };
template<typename Ret> template<typename Ret>
struct Handle_Return<std::shared_ptr<std::function<Ret>>> struct Handle_Return<std::shared_ptr<std::function<Ret>>> : Handle_Return<const std::shared_ptr<std::function<Ret>>>
{ {
static Boxed_Value handle(const std::shared_ptr<std::function<Ret>> &f) {
return Boxed_Value(
chaiscript::make_shared<dispatch::Proxy_Function_Base, dispatch::Assignable_Proxy_Function_Impl<Ret>>(std::ref(*f),f)
);
}
}; };
template<typename Ret> template<typename Ret>
@@ -143,21 +128,13 @@ namespace chaiscript
}; };
template<typename Ret> template<typename Ret>
struct Handle_Return<std::shared_ptr<Ret> > struct Handle_Return<std::shared_ptr<Ret>> : Handle_Return<std::shared_ptr<Ret> &>
{ {
static Boxed_Value handle(const std::shared_ptr<Ret> &r)
{
return Boxed_Value(r, true);
}
}; };
template<typename Ret> template<typename Ret>
struct Handle_Return<const std::shared_ptr<Ret> &> struct Handle_Return<const std::shared_ptr<Ret> &> : Handle_Return<std::shared_ptr<Ret> &>
{ {
static Boxed_Value handle(const std::shared_ptr<Ret> &r)
{
return Boxed_Value(r, true);
}
}; };
template<typename Ret> template<typename Ret>
@@ -170,9 +147,6 @@ namespace chaiscript
}; };
/**
* Used internally for handling a return value from a Proxy_Function call
*/
template<typename Ret> template<typename Ret>
struct Handle_Return<Ret &> struct Handle_Return<Ret &>
{ {
@@ -187,9 +161,6 @@ namespace chaiscript
} }
}; };
/**
* Used internally for handling a return value from a Proxy_Function call
*/
template<> template<>
struct Handle_Return<Boxed_Value> struct Handle_Return<Boxed_Value>
{ {
@@ -199,40 +170,19 @@ namespace chaiscript
} }
}; };
/**
* Used internally for handling a return value from a Proxy_Function call
*/
template<> template<>
struct Handle_Return<const Boxed_Value> struct Handle_Return<const Boxed_Value> : Handle_Return<Boxed_Value>
{ {
static Boxed_Value handle(const Boxed_Value &r)
{
return r;
}
}; };
/**
* Used internally for handling a return value from a Proxy_Function call
*/
template<> template<>
struct Handle_Return<Boxed_Value &> struct Handle_Return<Boxed_Value &> : Handle_Return<Boxed_Value>
{ {
static Boxed_Value handle(const Boxed_Value &r)
{
return r;
}
}; };
/**
* Used internally for handling a return value from a Proxy_Function call
*/
template<> template<>
struct Handle_Return<const Boxed_Value &> struct Handle_Return<const Boxed_Value &> : Handle_Return<Boxed_Value>
{ {
static Boxed_Value handle(const Boxed_Value &r)
{
return r;
}
}; };
/** /**
@@ -247,16 +197,9 @@ namespace chaiscript
} }
}; };
/**
* Used internally for handling a return value from a Proxy_Function call
*/
template<> template<>
struct Handle_Return<const Boxed_Number> struct Handle_Return<const Boxed_Number> : Handle_Return<Boxed_Number>
{ {
static Boxed_Value handle(const Boxed_Number &r)
{
return r.bv;
}
}; };

View File

@@ -60,7 +60,7 @@ namespace chaiscript
static std::array<std::array<bool, detail::lengthof_alphabet>, detail::max_alphabet> build_alphabet() static std::array<std::array<bool, detail::lengthof_alphabet>, detail::max_alphabet> build_alphabet()
{ {
std::array<std::array<bool, detail::lengthof_alphabet>, detail::max_alphabet> alphabet = {}; std::array<std::array<bool, detail::lengthof_alphabet>, detail::max_alphabet> alphabet;
for (auto &alpha : alphabet) { for (auto &alpha : alphabet) {
alpha.fill(false); alpha.fill(false);