#ifndef _FC_REFLECT_VECTOR_HPP_ #define _FC_REFLECT_VECTOR_HPP_ #include #include #include namespace fc { template class reflector> : public detail::reflector_impl, reflector> >{ public: virtual const char* name()const { static fc::string s = fc::string("vector<") + reflector::instance().name() + '>'; return s.c_str(); } virtual void visit( void* s, const abstract_visitor& v )const { vector& vec = *((vector*)s); size_t si = vec.size(); for( size_t i = 0; i < si; ++i ) v.visit( i, si, vec.at(i) ); } virtual void visit( const void* s, const abstract_const_visitor& v )const { const vector& vec = *((const vector*)s); size_t si = vec.size(); v.array_size(si); for( size_t i = 0; i < si; ++i ) v.visit( i, si, vec.at(i) ); } static reflector& instance() { static reflector inst; return inst; } }; template<> class reflector> : public detail::reflector_impl, reflector> >{ public: virtual const char* name()const { return "vector"; } virtual void visit( void* s, const abstract_visitor& v )const { vector& vec = *((vector*)s); fc::string hex; v.visit( hex ); vec.resize( hex.size() / 2 ); fc::from_hex( hex, vec.data(), vec.size() ); } virtual void visit( const void* s, const abstract_const_visitor& v )const { const vector& vec = *((const vector*)s); v.visit( fc::to_hex( vec.data(), vec.size() ) ); } static reflector& instance() { static reflector inst; return inst; } }; } // namespace fc #endif // _FC_REFLECT_VECTOR_HPP_