22 #ifndef CO_DATAOSTREAM_H
23 #define CO_DATAOSTREAM_H
28 #include <lunchbox/nonCopyable.h>
29 #include <lunchbox/stdExt.h>
37 namespace detail {
class DataOStream; }
38 namespace DataStreamTest {
class Sender; }
52 CO_API
void disable();
61 CO_API
bool hasSentData()
const;
70 void sendBody(
ConnectionPtr connection,
const uint64_t dataSize );
73 uint64_t getCompressedDataSize()
const;
80 { _write( &value,
sizeof( value ));
return *
this; }
83 template<
class T >
DataOStream& operator << ( Array< T > array )
84 { _write( array.data, array.getNumBytes( ));
return *
this; }
88 DataOStream& operator << ( const lunchbox::Buffer< T >& buffer );
92 DataOStream& operator << ( const std::vector< T >& value );
95 template<
class K,
class V >
96 DataOStream& operator << ( const std::map< K, V >& value );
100 DataOStream& operator << ( const std::set< T >& value );
103 template<
class K,
class V >
104 DataOStream& operator << ( const stde::hash_map< K, V >& value );
108 DataOStream& operator << ( const stde::hash_set< T >& value );
116 template<
typename C >
117 void serializeChildren(
const std::vector< C* >& children );
126 CO_API lunchbox::Bufferb& getBuffer();
129 void _initCompressor(
const uint32_t compressor );
132 CO_API
void _enable();
135 void flush(
const bool last );
141 void _setupConnections(
const Nodes& receivers );
143 void _setupConnections(
const Connections& connections );
146 void _setupConnection(
NodePtr node,
const bool useMulticast );
150 friend class DataStreamTest::Sender;
155 void _clearConnections();
160 virtual void sendData(
const void* buffer,
const uint64_t size,
161 const bool last ) = 0;
165 virtual CO_API
void reset();
168 detail::DataOStream*
const _impl;
171 CO_API uint64_t _getCompressedData(
void** chunks,
172 uint64_t* chunkSizes )
const;
175 CO_API
void _write(
const void* data, uint64_t size );
178 void _sendData(
const void* data,
const uint64_t size );
185 DataOStream& _writeFlatVector(
const std::vector< T >& value )
187 const uint64_t nElems = value.size();
188 _write( &nElems,
sizeof( nElems ));
190 _write( &value.front(), nElems *
sizeof( T ));
194 void _sendFooter(
const void* buffer,
const uint64_t size );
197 std::ostream& operator << ( std::ostream&,
const DataOStream& );
200 #include "dataOStream.ipp"
202 #endif //CO_DATAOSTREAM_H
std::vector< ConnectionPtr > Connections
A vector of ConnectionPtr's.
lunchbox::RefPtr< Node > NodePtr
A reference pointer for Node pointers.
A std::ostream-like interface for object serialization.
std::vector< NodePtr > Nodes
A vector of NodePtr's.
DataOStream & operator<<(const T &value)
Write a plain data item by copying it to the stream.
lunchbox::RefPtr< Connection > ConnectionPtr
A reference pointer for Connection pointers.