19 #ifndef INCLUDE_SF_VECTOR_HPP 20 #define INCLUDE_SF_VECTOR_HPP 22 #include <type_traits> 26 #include <SF/SerializeStl.hpp> 32 template<
typename T,
typename A>
33 inline void serializeVector(
35 std::vector<T,A> & vec,
38 serializeStlContainer<PushBackSemantics, ReserveSemantics>(ar, vec);
41 template<
typename T,
typename A>
42 inline void serializeVector(
44 std::vector<T,A> & vec,
47 serializeVectorFast(ar, vec);
50 template<
typename T,
typename A>
51 inline void serialize(
53 std::vector<T,A> & vec)
59 const bool IsBool = std::is_same<T, bool>::value;
60 static_assert( !IsBool,
"This serialization function cannot be used for vector<bool>." );
62 typedef typename std::is_fundamental<T>::type type;
63 serializeVector(ar, vec, (type *) 0);
67 RCF_EXPORT
void serialize(
SF::Archive & ar, std::vector<bool> & bits);
72 virtual ~I_VecWrapper() {}
74 virtual void resize(std::size_t newSize) = 0;
75 virtual std::uint32_t size() = 0;
76 virtual char * addressOfElement(std::size_t idx) = 0;
77 virtual std::uint32_t sizeofElement() = 0;
80 template<
typename Vec>
81 class VecWrapper :
public I_VecWrapper
84 VecWrapper(Vec & vec) : mVec(vec)
88 void resize(std::size_t newSize)
95 return static_cast<std::uint32_t
>(mVec.size());
98 char * addressOfElement(std::size_t idx)
100 return reinterpret_cast<char *
>( &mVec[idx] );
103 std::uint32_t sizeofElement()
105 typedef typename Vec::value_type ValueType;
106 return sizeof(ValueType);
113 RCF_EXPORT
void serializeVectorFastImpl(
117 template<
typename T,
typename A>
118 inline void serializeVectorFast(
120 std::vector<T,A> & vec)
122 VecWrapper< std::vector<T,A> > vecWrapper(vec);
123 serializeVectorFastImpl(ar, vecWrapper);
128 #endif // ! INCLUDE_SF_VECTOR_HPP Represents an archive, in which serialized objects are stored.
Definition: Archive.hpp:32
Definition: ByteBuffer.hpp:189