Cleanup Cast_Helper and add new boxed_cast<>() function.
This commit is contained in:
@@ -258,7 +258,7 @@ namespace dispatchkit
|
||||
{
|
||||
typedef typename boost::reference_wrapper<typename boost::add_const<Result>::type > Result_Type;
|
||||
|
||||
Result_Type operator()(Boxed_Value ob)
|
||||
static Result_Type cast(const Boxed_Value &ob)
|
||||
{
|
||||
if (ob.is_ref())
|
||||
{
|
||||
@@ -274,7 +274,7 @@ namespace dispatchkit
|
||||
{
|
||||
typedef typename boost::reference_wrapper<typename boost::add_const<Result>::type > Result_Type;
|
||||
|
||||
Result_Type operator()(Boxed_Value ob)
|
||||
static Result_Type cast(const Boxed_Value &ob)
|
||||
{
|
||||
if (ob.is_ref())
|
||||
{
|
||||
@@ -290,7 +290,7 @@ namespace dispatchkit
|
||||
{
|
||||
typedef const Result * Result_Type;
|
||||
|
||||
Result_Type operator()(Boxed_Value ob)
|
||||
static Result_Type cast(const Boxed_Value &ob)
|
||||
{
|
||||
if (ob.is_ref())
|
||||
{
|
||||
@@ -306,7 +306,7 @@ namespace dispatchkit
|
||||
{
|
||||
typedef Result * Result_Type;
|
||||
|
||||
Result_Type operator()(Boxed_Value ob)
|
||||
static Result_Type cast(const Boxed_Value &ob)
|
||||
{
|
||||
if (ob.is_ref())
|
||||
{
|
||||
@@ -322,7 +322,7 @@ namespace dispatchkit
|
||||
{
|
||||
typedef typename boost::reference_wrapper<Result> Result_Type;
|
||||
|
||||
Result_Type operator()(Boxed_Value ob)
|
||||
static Result_Type cast(const Boxed_Value &ob)
|
||||
{
|
||||
if (ob.is_ref())
|
||||
{
|
||||
@@ -338,7 +338,7 @@ namespace dispatchkit
|
||||
{
|
||||
typedef typename boost::shared_ptr<Result> Result_Type;
|
||||
|
||||
Result_Type operator()(Boxed_Value ob)
|
||||
static Result_Type cast(const Boxed_Value &ob)
|
||||
{
|
||||
return boost::any_cast<boost::shared_ptr<Result> >(ob.get());
|
||||
}
|
||||
@@ -350,12 +350,17 @@ namespace dispatchkit
|
||||
{
|
||||
typedef Boxed_Value Result_Type;
|
||||
|
||||
Result_Type operator()(Boxed_Value ob)
|
||||
static Result_Type cast(const Boxed_Value &ob)
|
||||
{
|
||||
return ob;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Type>
|
||||
typename Cast_Helper<Type>::Result_Type boxed_cast(const Boxed_Value &bv)
|
||||
{
|
||||
return Cast_Helper<Type>::cast(bv);
|
||||
}
|
||||
|
||||
struct Boxed_POD_Value
|
||||
{
|
||||
@@ -371,37 +376,37 @@ namespace dispatchkit
|
||||
|
||||
if (inp_ == typeid(double))
|
||||
{
|
||||
d = Cast_Helper<double>()(v);
|
||||
d = boxed_cast<double>(v);
|
||||
m_isfloat = true;
|
||||
} else if (inp_ == typeid(float)) {
|
||||
d = Cast_Helper<float>()(v);
|
||||
d = boxed_cast<float>(v);
|
||||
m_isfloat = true;
|
||||
} else if (inp_ == typeid(bool)) {
|
||||
i = Cast_Helper<bool>()(v);
|
||||
i = boxed_cast<bool>(v);
|
||||
} else if (inp_ == typeid(char)) {
|
||||
i = Cast_Helper<char>()(v);
|
||||
i = boxed_cast<char>(v);
|
||||
} else if (inp_ == typeid(int)) {
|
||||
i = Cast_Helper<int>()(v);
|
||||
i = boxed_cast<int>(v);
|
||||
} else if (inp_ == typeid(unsigned int)) {
|
||||
i = Cast_Helper<unsigned int>()(v);
|
||||
i = boxed_cast<unsigned int>(v);
|
||||
} else if (inp_ == typeid(long)) {
|
||||
i = Cast_Helper<long>()(v);
|
||||
i = boxed_cast<long>(v);
|
||||
} else if (inp_ == typeid(unsigned long)) {
|
||||
i = Cast_Helper<unsigned long>()(v);
|
||||
i = boxed_cast<unsigned long>(v);
|
||||
} else if (inp_ == typeid(int8_t)) {
|
||||
i = Cast_Helper<int8_t>()(v);
|
||||
i = boxed_cast<int8_t>(v);
|
||||
} else if (inp_ == typeid(int16_t)) {
|
||||
i = Cast_Helper<int16_t>()(v);
|
||||
i = boxed_cast<int16_t>(v);
|
||||
} else if (inp_ == typeid(int32_t)) {
|
||||
i = Cast_Helper<int32_t>()(v);
|
||||
i = boxed_cast<int32_t>(v);
|
||||
} else if (inp_ == typeid(int64_t)) {
|
||||
i = Cast_Helper<int64_t>()(v);
|
||||
i = boxed_cast<int64_t>(v);
|
||||
} else if (inp_ == typeid(uint8_t)) {
|
||||
i = Cast_Helper<uint8_t>()(v);
|
||||
i = boxed_cast<uint8_t>(v);
|
||||
} else if (inp_ == typeid(uint16_t)) {
|
||||
i = Cast_Helper<uint16_t>()(v);
|
||||
i = boxed_cast<uint16_t>(v);
|
||||
} else if (inp_ == typeid(uint32_t)) {
|
||||
i = Cast_Helper<uint32_t>()(v);
|
||||
i = boxed_cast<uint32_t>(v);
|
||||
} else {
|
||||
throw boost::bad_any_cast();
|
||||
}
|
||||
@@ -487,7 +492,9 @@ namespace dispatchkit
|
||||
template<>
|
||||
struct Cast_Helper<Boxed_POD_Value>
|
||||
{
|
||||
Boxed_POD_Value operator()(Boxed_Value ob)
|
||||
typedef Boxed_POD_Value Result_Type;
|
||||
|
||||
static Result_Type cast(const Boxed_Value &ob)
|
||||
{
|
||||
return Boxed_POD_Value(ob);
|
||||
}
|
||||
|
@@ -126,7 +126,7 @@ namespace dispatchkit
|
||||
funcs.insert(funcs.end(),
|
||||
Function_Map::value_type(
|
||||
t_name,
|
||||
Cast_Helper<Function_Map::mapped_type>()(get_object(t_name)))
|
||||
boxed_cast<Function_Map::mapped_type>(get_object(t_name)))
|
||||
);
|
||||
} catch (const std::bad_cast &) {
|
||||
} catch (const std::range_error &) {
|
||||
|
@@ -28,7 +28,7 @@ namespace dispatchkit
|
||||
Ret call(const std::vector<std::pair<std::string, boost::shared_ptr<Proxy_Function> > > &t_funcs,
|
||||
const std::vector<Boxed_Value> ¶ms)
|
||||
{
|
||||
return Cast_Helper<Ret>()(dispatch(t_funcs, params));
|
||||
return boxed_cast<Ret>(dispatch(t_funcs, params));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace dispatchkit
|
||||
template<typename FunctionType, typename ScriptEngine>
|
||||
boost::function<FunctionType> build_functor(ScriptEngine &e, const std::string &script)
|
||||
{
|
||||
return build_function_caller<FunctionType>(Cast_Helper<boost::shared_ptr<Proxy_Function> >()(e.evaluate_string(script)));
|
||||
return build_function_caller<FunctionType>(boxed_cast<boost::shared_ptr<Proxy_Function> >(e.evaluate_string(script)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#include <boost/preprocessor.hpp>
|
||||
|
||||
#define gettypeinfo(z,n,text) ti.push_back(Get_Type_Info<Param ## n>::get());
|
||||
#define casthelper(z,n,text) ,Cast_Helper<Param ## n>()(params[n])
|
||||
#define casthelper(z,n,text) ,dispatchkit::boxed_cast< Param ## n >(params[n])
|
||||
|
||||
|
||||
#ifndef BOOST_PP_IS_ITERATING
|
||||
|
@@ -101,12 +101,12 @@ int main()
|
||||
//choose the most appropriate version of the function
|
||||
Boxed_Value addresult = dispatch(ss.get_function("+"), Param_List_Builder() << double(5.1) << double(10.3));
|
||||
|
||||
//Using the Cast_Helper to unbox the resultant value and output it
|
||||
std::cout << Cast_Helper<double>()(addresult) << std::endl;
|
||||
//Using the cast to unbox the resultant value and output it
|
||||
std::cout << boxed_cast<double>(addresult) << std::endl;
|
||||
|
||||
//Using the Boxed_Value as input to another function, again with automatic dispatch.
|
||||
//This time we will not bother saving the result and will instead send it straight out
|
||||
std::cout << Cast_Helper<double>()(
|
||||
std::cout << boxed_cast<double>(
|
||||
dispatch(ss.get_function("*"), Param_List_Builder() << 2 << addresult)
|
||||
) << std::endl;
|
||||
|
||||
@@ -159,7 +159,7 @@ int main()
|
||||
boost::function<void (Test &)> show_message =
|
||||
build_function_caller<void (Test &)>(ss.get_function("show_message"));
|
||||
|
||||
Test &t = Cast_Helper<Test &>()(ss.get_object("testobj2"));
|
||||
Test &t = boxed_cast<Test &>(ss.get_object("testobj2"));
|
||||
|
||||
//Print the message the object was created with
|
||||
show_message(t);
|
||||
@@ -167,8 +167,8 @@ int main()
|
||||
//Now, get a reference to the object's stored message
|
||||
Boxed_Value stringref = dispatch(ss.get_function("get_message"), sos);
|
||||
|
||||
//Unbox it using Cast_Helper
|
||||
std::string &sr = Cast_Helper<std::string &>()(stringref);
|
||||
//Unbox it using boxed_cast
|
||||
std::string &sr = boxed_cast<std::string &>(stringref);
|
||||
|
||||
//Update the value of the reference
|
||||
sr = "Bob Updated The message";
|
||||
@@ -176,8 +176,8 @@ int main()
|
||||
//Now, get a reference to the object's stored number
|
||||
Boxed_Value numberref= dispatch(ss.get_function("number"), sos);
|
||||
|
||||
//Unbox it using Cast_Helper
|
||||
int &ir = Cast_Helper<int &>()(numberref);
|
||||
//Unbox it using boxed_cast
|
||||
int &ir = boxed_cast<int &>(numberref);
|
||||
|
||||
std::cout << "Number: " << ir << std::endl;
|
||||
|
||||
@@ -194,7 +194,7 @@ int main()
|
||||
//Call our newly named "add" function (which in turn dispatches +)
|
||||
|
||||
std::cout << "Result of add function: " <<
|
||||
Cast_Helper<int>()(dispatch(ss.get_function("add"), Param_List_Builder() << 5 << 2))
|
||||
boxed_cast<int>(dispatch(ss.get_function("add"), Param_List_Builder() << 5 << 2))
|
||||
<< std::endl;
|
||||
|
||||
|
||||
|
@@ -13,5 +13,5 @@ BOOST_AUTO_TEST_CASE( add_operators )
|
||||
Bootstrap::bootstrap(ss);
|
||||
dump_system(ss);
|
||||
|
||||
BOOST_CHECK_EQUAL(Cast_Helper<int>()(dispatch(ss.get_function("+"), Param_List_Builder() << double(5.1) << double(10.3))), 15.4);
|
||||
BOOST_CHECK_EQUAL(boxed_cast<int>(dispatch(ss.get_function("+"), Param_List_Builder() << double(5.1) << double(10.3))), 15.4);
|
||||
}
|
||||
|
Reference in New Issue
Block a user