#include #include #include #include namespace fc { #define CAST_VISITOR_IMPL(X) \ void reinterpret_value_visitor::visit()const{\ FC_THROW( bad_cast() );\ } \ void reinterpret_value_visitor::visit( const char& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const uint8_t& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const uint16_t& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const uint32_t& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const uint64_t& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const int8_t& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const int16_t& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const int32_t& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const int64_t& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const double& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const float& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const bool& c )const{ _s = c; } \ void reinterpret_value_visitor::visit( const string& c )const{\ _s = boost::lexical_cast( reinterpret_cast(c) ); \ } \ void reinterpret_value_visitor::visit( const char* member, int idx, int size, \ const cref& v)const{\ FC_THROW( bad_cast() );\ }\ void reinterpret_value_visitor::visit( int idx, int size, const cref& v)const{\ FC_THROW( bad_cast() );\ } CAST_VISITOR_IMPL(int64_t); CAST_VISITOR_IMPL(int32_t); CAST_VISITOR_IMPL(int16_t); CAST_VISITOR_IMPL(int8_t); CAST_VISITOR_IMPL(uint64_t); CAST_VISITOR_IMPL(uint32_t); CAST_VISITOR_IMPL(uint16_t); CAST_VISITOR_IMPL(uint8_t); CAST_VISITOR_IMPL(double); CAST_VISITOR_IMPL(float); CAST_VISITOR_IMPL(bool); #undef CAST_VISITOR_IMPL void reinterpret_value_visitor::visit()const{ FC_THROW( bad_cast() ); } void reinterpret_value_visitor::visit( const char& c )const{ slog("" ); reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const uint8_t& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const uint16_t& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const uint32_t& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const uint64_t& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const int8_t& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const int16_t& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const int32_t& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const int64_t& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const double& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const float& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const bool& c )const{ reinterpret_cast(_s) = boost::lexical_cast(c); } void reinterpret_value_visitor::visit( const string& c )const{ slog( "" ); _s = c; } void reinterpret_value_visitor::visit( const char* member, int idx, int size, const cref& v)const{ elog( "%s", member ); FC_THROW( bad_cast() ); } void reinterpret_value_visitor::visit( int idx, int size, const cref& v)const{ elog( "%d of %d", idx, size ); FC_THROW( bad_cast() ); } }