22 #ifndef _BLAZE_MATH_SERIALIZATION_VECTORSERIALIZER_H_
23 #define _BLAZE_MATH_SERIALIZATION_VECTORSERIALIZER_H_
158 template<
bool IsDenseVector >
159 struct VectorValueMappingHelper;
171 template<
typename T >
172 struct VectorValueMapping
174 enum { value = VectorValueMappingHelper< IsDenseVector<T>::value >::value };
200 template<
typename Archive,
typename VT,
bool TF >
208 template<
typename Archive,
typename VT,
bool TF >
217 template<
typename Archive,
typename VT >
220 template<
typename Archive,
typename VT,
bool TF >
223 template<
typename Archive,
typename VT,
bool TF >
231 template<
typename Archive,
typename VT >
234 template<
typename VT >
237 template<
typename VT >
240 template<
typename Archive,
typename VT >
243 template<
typename Archive,
typename VT,
bool TF >
247 template<
typename Archive,
typename VT,
bool TF >
251 template<
typename Archive,
typename VT,
bool TF >
254 template<
typename Archive,
typename VT,
bool TF >
257 template<
typename Archive,
typename VT,
bool TF >
324 throw std::runtime_error(
"Faulty archive detected" );
345 typedef typename VT::ElementType ET;
348 archive << uint8_t ( VectorValueMapping<VT>::value );
349 archive << uint8_t ( TypeValueMapping<ET>::value );
350 archive << uint8_t (
sizeof( ET ) );
352 archive << uint64_t( IsDenseVector<VT>::value ? vec.size() : vec.nonZeros() );
355 throw std::runtime_error(
"File header could not be serialized" );
375 while( ( i < (~vec).size() ) && ( archive << (~vec)[i] ) ) {
380 throw std::runtime_error(
"Dense vector could not be serialized" );
399 typedef typename VT::ConstIterator ConstIterator;
401 ConstIterator element( (~vec).begin() );
402 while( ( element != (~vec).end() ) &&
403 ( archive << element->index() << element->value() ) ) {
408 throw std::runtime_error(
"Sparse vector could not be serialized" );
438 throw std::invalid_argument(
"Faulty archive detected" );
465 typedef typename VT::ElementType ET;
468 throw std::runtime_error(
"Corrupt archive detected" );
471 throw std::runtime_error(
"Invalid version detected" );
473 else if( (
type_ & 1U ) != 0U ||
type_ & (~3U) != 0U ) {
474 throw std::runtime_error(
"Invalid vector type detected" );
477 throw std::runtime_error(
"Invalid element type detected" );
480 throw std::runtime_error(
"Invalid element size detected" );
483 throw std::runtime_error(
"Invalid vector size detected" );
486 throw std::runtime_error(
"Invalid number of elements detected" );
498 template<
typename VT >
512 template<
typename VT >
515 vec.resize (
size_,
false );
540 else if(
type_ == 2U ) {
568 typedef typename VT::ElementType ET;
573 while( ( i !=
size_ ) && ( archive >> value ) ) {
579 throw std::runtime_error(
"Dense vector could not be deserialized" );
603 if(
size_ == 0UL )
return;
604 archive.read( &(~vec)[0],
size_ );
607 throw std::runtime_error(
"Dense vector could not be deserialized" );
630 typedef typename VT::ElementType ET;
635 while( ( i !=
size_ ) && ( archive >> value ) ) {
641 throw std::runtime_error(
"Sparse vector could not be deserialized" );
664 typedef typename VT::ElementType ET;
670 while( ( i !=
number_ ) && ( archive >> index >> value ) ) {
671 (~vec)[index] = value;
676 throw std::runtime_error(
"Dense vector could not be deserialized" );
699 typedef typename VT::ElementType ET;
705 while( ( i !=
number_ ) && ( archive >> index >> value ) ) {
706 (~vec).append( index, value,
false );
711 throw std::runtime_error(
"Sparse vector could not be deserialized" );
730 struct VectorSerializer::VectorValueMappingHelper<true>
743 struct VectorSerializer::VectorValueMappingHelper<false>
823 template<
typename Archive
845 template<
typename Archive