22 #ifndef CO_DATAISTREAM_H
23 #define CO_DATAISTREAM_H
27 #include <lunchbox/array.h>
28 #include <lunchbox/bitOperation.h>
29 #include <lunchbox/stdExt.h>
31 #include <boost/type_traits.hpp>
38 namespace detail {
class DataIStream; }
47 virtual size_t nRemainingBuffers()
const = 0;
49 virtual uint128_t getVersion()
const = 0;
50 virtual void reset() { _reset(); }
51 void setSwapping(
const bool onOff );
52 CO_API
bool isSwapping()
const;
59 template<
typename T > T
read()
60 { T value; *
this >> value;
return value; }
64 { _read( &value,
sizeof( value )); _swap( value );
return *
this; }
68 { _readArray( array, boost::is_pod<T>( ));
return *
this; }
83 template<
class K,
class V >
90 template<
class K,
class V >
101 # ifdef CO_IGNORE_BYTESWAP
103 template<
class T >
static void swap( T& ) { }
106 template<
class T >
static void swap( T& v ) { lunchbox::byteswap(v); }
120 template<
typename O,
typename C >
121 void deserializeChildren( O*
object,
const std::vector< C* >& old,
122 std::vector< C* >& result );
152 bool wasUsed()
const;
171 virtual bool getNextBuffer( uint32_t& compressor, uint32_t& nChunks,
172 const void** chunkData, uint64_t& size )=0;
176 detail::DataIStream*
const _impl;
179 CO_API
void _read(
void* data, uint64_t size );
185 CO_API
bool _checkBuffer();
186 CO_API
void _reset();
188 const uint8_t* _decompress(
const void* data,
const uint32_t name,
189 const uint32_t nChunks,
190 const uint64_t dataSize );
194 DataIStream& _readFlatVector ( std::vector< T >& value )
198 LBASSERTINFO( nElems < LB_BIT48,
199 "Out-of-sync DataIStream: " << nElems <<
" elements?" );
200 value.resize(
size_t( nElems ));
202 *
this >> Array< T >( &value.front(), nElems );
207 template<
class T >
void _swap( T& value )
const
208 {
if( isSwapping( ))
swap( value ); }
211 template<
class T >
void _readArray( Array< T >,
const boost::true_type& );
214 template<
class T >
void _readArray( Array< T >,
const boost::false_type&);
217 template<
class T >
void _swap( Array< T > array )
const
221 #pragma omp parallel for
222 for( ssize_t i = 0; i < ssize_t( array.num ); ++i )
223 swap( array.data[i] );
228 #include "dataIStream.ipp"
230 #endif //CO_DATAISTREAM_H
Defines export visibility macros for Collage.
static void swap(T &v)
Byte-swap a plain data item.
virtual CO_API LocalNodePtr getLocalNode() const =0
lunchbox::RefPtr< LocalNode > LocalNodePtr
A reference pointer for LocalNode pointers.
lunchbox::RefPtr< Node > NodePtr
A reference pointer for Node pointers.
CO_API const void * getRemainingBuffer(const uint64_t size)
DataIStream & operator>>(T &value)
Read a plain data item.
CO_API uint64_t getRemainingBufferSize()
A std::istream-like input data stream for binary data.
virtual CO_API NodePtr getRemoteNode() const =0