inline void serializeFundamental(SF::Archive &ar, T &t, const unsigned int, unsigned int count = 1) { typedef typename boost::remove_const<T>::type U; BOOST_STATIC_ASSERT( boost::is_fundamental<U>::value ); U *pu = const_cast<U *>(&t); void *pvt = pu; if (ar.isRead()) { I_Encoding &encoding = dynamic_cast<I_WithEncoding *>(ar.getStream())->getEncoding(); DataPtr data; dynamic_cast<WithFormatRead *>(ar.getStream())->get(data); if (count > 1 && count != encoding.getCount(data,typeid(U)) ) { SF_THROW(SF::Exception, "Static array size mismatch" )(typeid(U).name())(count)(encoding.getCount(data,typeid(T))); } encoding.toObject(data, pvt, typeid(T), count ); } else if (ar.isWrite()) { I_Encoding &encoding = dynamic_cast<I_WithEncoding *>(ar.getStream())->getEncoding(); DataPtr data; encoding.toData(data, pvt, typeid(U), count ); dynamic_cast<WithFormatWrite *>(ar.getStream())->put(data); } }