static Archive& apply(Archive& ar, U(&v)[N], YAS_ENABLE_IF_IS_ANY_OF(U, char, signed char, unsigned char, bool)) { std::uint32_t size = 0; ar.read(size); if ( size != N-1 ) YAS_THROW_BAD_ARRAY_SIZE(); ar.read(v, size); v[size] = 0; return ar; }
static Archive& apply(Archive& ar, U(&v)[N], YAS_ENABLE_IF_IS_ANY_OF(U, char, signed char, unsigned char)) { std::uint32_t size = 0; ar.read(size); if ( size != N-1 ) YAS_THROW_BAD_ARRAY_SIZE(); if ( ar.getch() != space_sep ) YAS_THROW_SPACE_IS_EXPECTED(); ar.read(v, size); v[size] = 0; return ar; }
static Archive& apply(Archive& ar, T(&v)[N]) { std::uint32_t size = 0; ar.read(size); if ( size != N ) YAS_THROW_BAD_ARRAY_SIZE(); for ( auto &it: v ) { ar & it; } return ar; }
static Archive& apply(Archive& ar, U(&v)[N], YAS_DISABLE_IF_IS_ANY_OF(U, char, signed char, unsigned char, bool)) { std::uint32_t size = 0; ar.read(size); if ( size != N ) YAS_THROW_BAD_ARRAY_SIZE(); for ( auto &it: v ) { ar.read(it); } return ar; }
static Archive& apply(Archive& ar, std::array<T, N>& array) { std::uint32_t size = 0; ar & size; if ( size != N ) YAS_THROW_BAD_ARRAY_SIZE(); for ( auto &it: array ) { ar & it; } return ar; }
static Archive& apply(Archive& ar, boost::array<T, N>& array) { std::uint32_t size = 0; ar & size; if ( size != N ) YAS_THROW_BAD_ARRAY_SIZE(); typename boost::array<T, N>::iterator it = array.begin(); for ( ; it != array.end(); ++it ) { ar & (*it); } }
static Archive& apply(Archive& ar, T(&v)[N]) { std::uint32_t size = 0; ar.read(size); if ( size != N ) YAS_THROW_BAD_ARRAY_SIZE(); if ( ar.getch() != space_sep ) YAS_THROW_SPACE_IS_EXPECTED(); for ( auto &it: v ) { ar & it; } return ar; }
static Archive& apply(Archive& ar, U(&v)[N], YAS_DISABLE_IF_IS_ANY_OF(U, char, signed char, unsigned char, bool)) { std::uint32_t size = 0; ar.read(size); if ( size != N ) YAS_THROW_BAD_ARRAY_SIZE(); if ( ar.getch() != space_sep ) YAS_THROW_SPACE_IS_EXPECTED(); for ( auto &it: v ) { ar & it; } return ar; }
static Archive& load(Archive &ar, boost::container::static_vector<T, N> &vector) { std::uint32_t capacity = 0, size = 0; ar.read(capacity); ar.read(size); if ( capacity != N || size > N ) YAS_THROW_BAD_ARRAY_SIZE(); vector.resize(size); if ( std::is_fundamental<T>::value && sizeof(T) == 1 ) { ar.read(&vector[0], size); } else { for ( auto &it: vector ) { ar & it; } } return ar; }