The Gaudi Framework  v40r0 (475e45c1)
StreamBuffer Class Reference

#include <GaudiKernel/StreamBuffer.h>

Collaboration diagram for StreamBuffer:

Classes

class  ContainedLink
 Definition of the contained link set. More...
 
class  DataIO
 A small base class to handle generic data streaming. More...
 
class  IdentifiedLink
 Definition of the contained link set. More...
 
class  Istream
 Reader for standard input streams. More...
 
class  Ostream
 Writer for standard output streams. More...
 

Public Types

enum  Mode { UNINITIALIZED, READING, WRITING }
 Streamer mode. More...
 
enum  SwapAction { SINGLE_BYTE, SWAP, NOSWAP }
 Data Sawp actions. More...
 
enum  State { INVALID = -1, VALID }
 Link state defintions. More...
 
typedef std::vector< ContainedLinkContainedLinks
 
typedef std::vector< IdentifiedLinkIdentifiedLinks
 Definition of the identifiable link set. More...
 
typedef void(* AnalyzeFunction) (const void *data, int siz, const std::type_info &type)
 Definition of the buffer analyzer. More...
 

Public Member Functions

 StreamBuffer (bool do_swap=true)
 Standard constructor. More...
 
virtual ~StreamBuffer ()
 Standard destructor. More...
 
const char * data () const
 Read access to data buffer. More...
 
char * data ()
 write access to data buffer More...
 
void erase ()
 Reset the buffer. More...
 
char * adopt () const
 Remove the data buffer and pass it to client. It's the client responsability to free the memory. More...
 
void reserve (long len)
 Reserve buffer space; Default: 16 k buffer size. More...
 
void extend (long len)
 Extend the buffer. More...
 
long size () const
 Total buffer size. More...
 
ContainedLinkscontainedLinks ()
 Access to contained links. More...
 
const ContainedLinkscontainedLinks () const
 CONST Access to contained links. More...
 
IdentifiedLinksidentifiedLinks ()
 Access to identified links. More...
 
const IdentifiedLinksidentifiedLinks () const
 CONST Access to identified links. More...
 
void setMode (Mode m)
 Set mode of the stream and allocate buffer. More...
 
bool isReading () const
 Get stream buffer state. More...
 
bool isWriting () const
 Get stream buffer state. More...
 
long buffPointer () const
 Retrieve current buffer pointer. More...
 
void setBuffPointer (long ptr)
 Retrieve current buffer pointer. More...
 
void setAnalyzer (AnalyzeFunction fun=nullptr)
 Enable user analysis function. More...
 
void swapToBuffer (const void *source, int siz)
 Swap buffers: int, long, short, float and double. More...
 
void swapFromBuffer (void *target, int siz)
 Swap buffers: int, long, short, float and double. More...
 
StreamBufferwriteBytes (const char *str, long len)
 Write string to output stream. More...
 
void getIdentifiedLink (DataObject *&pObject, long &hint)
 
void addIdentifiedLink (const DataObject *pObject, long hint)
 
void getContainedLink (ContainedObject *&pObject, long &hint, long &link)
 
void addContainedLink (const ContainedObject *pObject, long hint, long link)
 
StreamBufferoperator<< (long long data)
 Output Streamer. More...
 
StreamBufferoperator>> (long long &data)
 Input Streamer. More...
 
StreamBufferoperator<< (int data)
 Output Streamer. More...
 
StreamBufferoperator>> (int &data)
 Input Streamer. More...
 
StreamBufferoperator<< (unsigned int data)
 Output Streamer. More...
 
StreamBufferoperator>> (unsigned int &data)
 Input Streamer. More...
 
StreamBufferoperator<< (long data)
 Output Streamer. More...
 
StreamBufferoperator>> (long &data)
 Input Streamer. More...
 
StreamBufferoperator<< (unsigned long data)
 Output Streamer. More...
 
StreamBufferoperator>> (unsigned long &data)
 Input Streamer. More...
 
StreamBufferoperator<< (short data)
 Output Streamer. More...
 
StreamBufferoperator>> (short &data)
 Input Streamer. More...
 
StreamBufferoperator<< (unsigned short data)
 Output Streamer. More...
 
StreamBufferoperator>> (unsigned short &data)
 Input Streamer. More...
 
StreamBufferoperator<< (char data)
 Output Streamer. More...
 
StreamBufferoperator>> (char &data)
 Input Streamer. More...
 
StreamBufferoperator<< (unsigned char data)
 Output Streamer. More...
 
StreamBufferoperator>> (unsigned char &data)
 Input Streamer. More...
 
StreamBufferoperator<< (float data)
 Output Streamer. More...
 
StreamBufferoperator>> (float &data)
 Input Streamer. More...
 
StreamBufferoperator<< (double data)
 Output Streamer. More...
 
StreamBufferoperator>> (double &data)
 Input Streamer. More...
 
StreamBufferoperator>> (char *data)
 Streamer to read strings in (char*) format. More...
 
StreamBufferoperator<< (const char *data)
 Streamer to write strings in (char*) format. More...
 
StreamBufferoperator>> (std::string &data)
 Streamer to read strings in (std::string) format. More...
 
StreamBufferoperator<< (const std::string &data)
 Streamer to write strings in (std::string) format. More...
 
template<class TYPE >
StreamBufferoperator>> (TYPE *&refpObject)
 Streamer to read links to contained or identified objects. More...
 
StreamBufferoperator<< (const ContainedObject *pObject)
 Streamer to write links to contained objects. More...
 
StreamBufferoperator<< (const DataObject *pObject)
 Streamer to write links to identified objects. More...
 
void serialize (DataIO &ioObject)
 Serialize the buffer using an IO object. More...
 

Protected Member Functions

SwapAction swapBuffer (int siz) const
 Check for byte swapping. More...
 
template<class TYPE >
StreamBuffergetObjectPointer (const DataObject *, TYPE *&refpObject)
 Helper to distinguish between identified pointers and contained pointers. More...
 
template<class TYPE >
StreamBuffergetObjectPointer (const ContainedObject *, TYPE *&refpObject)
 Helper to distinguish between identified pointers and contained pointers. More...
 

Protected Attributes

Mode m_mode = UNINITIALIZED
 Boolean indicating wether the stream is in read or write mode. More...
 
long m_pointer = 0
 Current buffer pointer. More...
 
long m_length = 0
 Total buffer length. More...
 
char * m_buffer = nullptr
 Pointer to heap buffer. More...
 
bool m_swapEnabled = true
 Flag indicating swapping. More...
 
ContainedLinks m_containedLinks
 Container with links to contained objects. More...
 
IdentifiedLinks m_identifiedLinks
 Container with links to contained objects. More...
 
AnalyzeFunction m_analyzer = nullptr
 Hook function for analysis of data to the stream. More...
 

Friends

class DataObject
 DataObject is friend. More...
 

Detailed Description

The stream buffer is a small object collecting object data. The basic idea behind the StreamBuffer is generic object conversion. The StreamBuffer acts as a byte stream (hence inheriting from a std::string: DP: this is not true anymore and it is not a bad thing in my opinion) and stores any information streamed to the buffer. Since the information must be represented in a generic way on the fly byte swapping is performed. However, not only primitive data can be stored in the buffer, but also pointers to DataObjects (symbolic links) and pointers to contained objects. Automatically during serialization the persistent references to the corresponding objects and containers must be stored. These objects are accessible from the StreamBuffer object.

"On the fly" data conversion to non persistent

Author
M.Frank

Definition at line 47 of file StreamBuffer.h.

Member Typedef Documentation

◆ AnalyzeFunction

typedef void( * StreamBuffer::AnalyzeFunction) (const void *data, int siz, const std::type_info &type)

Definition of the buffer analyzer.

Definition at line 144 of file StreamBuffer.h.

◆ ContainedLinks

Definition at line 140 of file StreamBuffer.h.

◆ IdentifiedLinks

Definition of the identifiable link set.

Definition at line 142 of file StreamBuffer.h.

Member Enumeration Documentation

◆ Mode

Streamer mode.

Enumerator
UNINITIALIZED 
READING 
WRITING 

Definition at line 113 of file StreamBuffer.h.

◆ State

Link state defintions.

Enumerator
INVALID 
VALID 

Definition at line 117 of file StreamBuffer.h.

117 { INVALID = -1, VALID };

◆ SwapAction

Data Sawp actions.

Enumerator
SINGLE_BYTE 
SWAP 
NOSWAP 

Definition at line 115 of file StreamBuffer.h.

115 { SINGLE_BYTE, SWAP, NOSWAP };

Constructor & Destructor Documentation

◆ StreamBuffer()

StreamBuffer::StreamBuffer ( bool  do_swap = true)
inline

Standard constructor.

Definition at line 201 of file StreamBuffer.h.

201 : m_swapEnabled( do_swap ) {}

◆ ~StreamBuffer()

virtual StreamBuffer::~StreamBuffer ( )
inlinevirtual

Standard destructor.

Definition at line 203 of file StreamBuffer.h.

203 { ::free( m_buffer ); }

Member Function Documentation

◆ addContainedLink()

void StreamBuffer::addContainedLink ( const ContainedObject pObject,
long  hint,
long  link 
)
inline

Definition at line 300 of file StreamBuffer.h.

300  {
301  m_containedLinks.push_back( ContainedLink( (ContainedObject*)pObject, hint, link ) );
302  }

◆ addIdentifiedLink()

void StreamBuffer::addIdentifiedLink ( const DataObject pObject,
long  hint 
)
inline

Definition at line 289 of file StreamBuffer.h.

289  {
290  m_identifiedLinks.push_back( IdentifiedLink( (DataObject*)pObject, hint ) );
291  }

◆ adopt()

char* StreamBuffer::adopt ( ) const
inline

Remove the data buffer and pass it to client. It's the client responsability to free the memory.

Definition at line 211 of file StreamBuffer.h.

211  {
212  char* ptr = m_buffer;
213  m_containedLinks.erase( m_containedLinks.begin(), m_containedLinks.end() );
214  m_identifiedLinks.erase( m_identifiedLinks.begin(), m_identifiedLinks.end() );
215  m_buffer = NULL; // char *
216  m_pointer = 0; // long
217  m_length = 0; // long
218  return ptr;
219  }

◆ buffPointer()

long StreamBuffer::buffPointer ( ) const
inline

Retrieve current buffer pointer.

Definition at line 263 of file StreamBuffer.h.

263 { return m_pointer; }

◆ containedLinks() [1/2]

ContainedLinks& StreamBuffer::containedLinks ( )
inline

Access to contained links.

Definition at line 240 of file StreamBuffer.h.

240 { return m_containedLinks; }

◆ containedLinks() [2/2]

const ContainedLinks& StreamBuffer::containedLinks ( ) const
inline

CONST Access to contained links.

Definition at line 242 of file StreamBuffer.h.

242 { return m_containedLinks; }

◆ data() [1/2]

char* StreamBuffer::data ( )
inline

write access to data buffer

Definition at line 207 of file StreamBuffer.h.

207 { return m_buffer; }

◆ data() [2/2]

const char* StreamBuffer::data ( ) const
inline

Read access to data buffer.

Definition at line 205 of file StreamBuffer.h.

205 { return m_buffer; }

◆ erase()

void StreamBuffer::erase ( )
inline

Reset the buffer.

Definition at line 209 of file StreamBuffer.h.

209 { m_pointer = 0; }

◆ extend()

void StreamBuffer::extend ( long  len)
inline

Extend the buffer.

Definition at line 228 of file StreamBuffer.h.

228  {
229  if ( len + m_pointer > m_length ) {
230  // We have to be a bit generous here in order not to run too often
231  // into ::realloc().
232  long new_len = ( m_length < 16384 ) ? 16384 : 2 * m_length;
233  if ( m_length < len ) new_len += len;
234  reserve( new_len );
235  }
236  }

◆ getContainedLink()

void StreamBuffer::getContainedLink ( ContainedObject *&  pObject,
long &  hint,
long &  link 
)
inline

Definition at line 293 of file StreamBuffer.h.

293  {
294  ContainedLink& l = m_containedLinks.back();
295  pObject = l.first;
296  hint = l.second;
297  link = l.third;
298  m_containedLinks.pop_back();
299  }

◆ getIdentifiedLink()

void StreamBuffer::getIdentifiedLink ( DataObject *&  pObject,
long &  hint 
)
inline

Definition at line 283 of file StreamBuffer.h.

283  {
284  IdentifiedLink& l = m_identifiedLinks.back();
285  pObject = l.first;
286  hint = l.second;
287  m_identifiedLinks.pop_back();
288  }

◆ getObjectPointer() [1/2]

template<class TYPE >
StreamBuffer& StreamBuffer::getObjectPointer ( const ContainedObject ,
TYPE *&  refpObject 
)
inlineprotected

Helper to distinguish between identified pointers and contained pointers.

This entry resolves contained pointers (= Pointers to ContainedObject instances.)

Definition at line 191 of file StreamBuffer.h.

191  {
192  ContainedLink& link = m_containedLinks.back();
193  ContainedObject* pObj = link.first;
194  m_containedLinks.pop_back();
195  refpObject = dynamic_cast<TYPE*>( pObj );
196  return *this;
197  }

◆ getObjectPointer() [2/2]

template<class TYPE >
StreamBuffer& StreamBuffer::getObjectPointer ( const DataObject ,
TYPE *&  refpObject 
)
inlineprotected

Helper to distinguish between identified pointers and contained pointers.

This entry resolves identified pointers (= Pointers to DataObject instances.)

Definition at line 180 of file StreamBuffer.h.

180  {
181  IdentifiedLink& link = m_identifiedLinks.back();
182  DataObject* pObj = link.first;
183  m_identifiedLinks.pop_back();
184  refpObject = dynamic_cast<TYPE*>( pObj );
185  return *this;
186  }

◆ identifiedLinks() [1/2]

IdentifiedLinks& StreamBuffer::identifiedLinks ( )
inline

Access to identified links.

Definition at line 245 of file StreamBuffer.h.

245 { return m_identifiedLinks; }

◆ identifiedLinks() [2/2]

const IdentifiedLinks& StreamBuffer::identifiedLinks ( ) const
inline

CONST Access to identified links.

Definition at line 247 of file StreamBuffer.h.

247 { return m_identifiedLinks; }

◆ isReading()

bool StreamBuffer::isReading ( ) const
inline

Get stream buffer state.

Definition at line 258 of file StreamBuffer.h.

258 { return m_mode == READING; }

◆ isWriting()

bool StreamBuffer::isWriting ( ) const
inline

Get stream buffer state.

Definition at line 261 of file StreamBuffer.h.

261 { return m_mode == WRITING; }

◆ operator<<() [1/15]

StreamBuffer& StreamBuffer::operator<< ( char  data)
inline

Output Streamer.

Definition at line 406 of file StreamBuffer.h.

406  {
407  swapToBuffer( &data, sizeof( data ) );
408  STREAM_ANALYSE( data, sizeof( data ) );
409  return *this;
410  }

◆ operator<<() [2/15]

StreamBuffer& StreamBuffer::operator<< ( const char *  data)
inline

Streamer to write strings in (char*) format.

Definition at line 457 of file StreamBuffer.h.

457  {
458  const char* ptr = 0 == data ? "" : data;
459  size_t len = strlen( ptr ) + 1;
460  if ( 0 == m_analyzer )
461  writeBytes( ptr, len );
462  else { STREAM_ANALYSE( data, len ); }
463  return *this;
464  }

◆ operator<<() [3/15]

StreamBuffer& StreamBuffer::operator<< ( const ContainedObject pObject)
inline

Streamer to write links to contained objects.

Links to contained objects are not stored immediately, but collected instead and analyzed later.

Parameters
pObjectPointer to object to be loaded.
Returns
Reference to StreamBuffer object

Definition at line 500 of file StreamBuffer.h.

500  {
501  STREAM_ANALYSE( pObject, sizeof( pObject ) );
502  addContainedLink( pObject, INVALID, INVALID );
503  return *this;
504  }

◆ operator<<() [4/15]

StreamBuffer& StreamBuffer::operator<< ( const DataObject pObject)
inline

Streamer to write links to identified objects.

Links to identified objects are not stored immediately, but collected instead and analyzed later.

Parameters
pObjectPointer to object to be loaded.
Returns
Reference to StreamBuffer object

Definition at line 512 of file StreamBuffer.h.

512  {
513  STREAM_ANALYSE( pObject, sizeof( pObject ) );
514  addIdentifiedLink( pObject, INVALID );
515  return *this;
516  }

◆ operator<<() [5/15]

StreamBuffer& StreamBuffer::operator<< ( const std::string &  data)
inline

Streamer to write strings in (std::string) format.

Definition at line 473 of file StreamBuffer.h.

473  {
474  if ( 0 == m_analyzer ) {
475  const char* ptr = data.c_str();
476  long len = data.length();
477  writeBytes( ptr, len );
478  } else {
479  STREAM_ANALYSE( data, sizeof( data ) );
480  }
481  return *this;
482  }

◆ operator<<() [6/15]

StreamBuffer& StreamBuffer::operator<< ( double  data)
inline

Output Streamer.

Definition at line 439 of file StreamBuffer.h.

439  {
440  swapToBuffer( &data, sizeof( data ) );
441  STREAM_ANALYSE( data, sizeof( data ) );
442  return *this;
443  }

◆ operator<<() [7/15]

StreamBuffer& StreamBuffer::operator<< ( float  data)
inline

Output Streamer.

Definition at line 428 of file StreamBuffer.h.

428  {
429  swapToBuffer( &data, sizeof( data ) );
430  STREAM_ANALYSE( data, sizeof( data ) );
431  return *this;
432  }

◆ operator<<() [8/15]

StreamBuffer& StreamBuffer::operator<< ( int  data)
inline

Output Streamer.

Definition at line 340 of file StreamBuffer.h.

340  {
341  swapToBuffer( &data, sizeof( data ) );
342  STREAM_ANALYSE( data, sizeof( data ) );
343  return *this;
344  }

◆ operator<<() [9/15]

StreamBuffer& StreamBuffer::operator<< ( long  data)
inline

Output Streamer.

Definition at line 362 of file StreamBuffer.h.

362  {
363  swapToBuffer( &data, sizeof( data ) );
364  STREAM_ANALYSE( data, sizeof( data ) );
365  return *this;
366  }

◆ operator<<() [10/15]

StreamBuffer& StreamBuffer::operator<< ( long long  data)
inline

Output Streamer.

Definition at line 329 of file StreamBuffer.h.

329  {
330  swapToBuffer( &data, sizeof( data ) );
331  STREAM_ANALYSE( data, sizeof( data ) );
332  return *this;
333  }

◆ operator<<() [11/15]

StreamBuffer& StreamBuffer::operator<< ( short  data)
inline

Output Streamer.

Definition at line 384 of file StreamBuffer.h.

384  {
385  swapToBuffer( &data, sizeof( data ) );
386  STREAM_ANALYSE( data, sizeof( data ) );
387  return *this;
388  }

◆ operator<<() [12/15]

StreamBuffer& StreamBuffer::operator<< ( unsigned char  data)
inline

Output Streamer.

Definition at line 417 of file StreamBuffer.h.

417  {
418  swapToBuffer( &data, sizeof( data ) );
419  STREAM_ANALYSE( data, sizeof( data ) );
420  return *this;
421  }

◆ operator<<() [13/15]

StreamBuffer& StreamBuffer::operator<< ( unsigned int  data)
inline

Output Streamer.

Definition at line 351 of file StreamBuffer.h.

351  {
352  swapToBuffer( &data, sizeof( data ) );
353  STREAM_ANALYSE( data, sizeof( data ) );
354  return *this;
355  }

◆ operator<<() [14/15]

StreamBuffer& StreamBuffer::operator<< ( unsigned long  data)
inline

Output Streamer.

Definition at line 373 of file StreamBuffer.h.

373  {
374  swapToBuffer( &data, sizeof( data ) );
375  STREAM_ANALYSE( data, sizeof( data ) );
376  return *this;
377  }

◆ operator<<() [15/15]

StreamBuffer& StreamBuffer::operator<< ( unsigned short  data)
inline

Output Streamer.

Definition at line 395 of file StreamBuffer.h.

395  {
396  swapToBuffer( &data, sizeof( data ) );
397  STREAM_ANALYSE( data, sizeof( data ) );
398  return *this;
399  }

◆ operator>>() [1/14]

StreamBuffer& StreamBuffer::operator>> ( char &  data)
inline

Input Streamer.

Definition at line 412 of file StreamBuffer.h.

412  {
413  swapFromBuffer( &data, sizeof( data ) );
414  return *this;
415  }

◆ operator>>() [2/14]

StreamBuffer& StreamBuffer::operator>> ( char *  data)
inline

Streamer to read strings in (char*) format.

Definition at line 450 of file StreamBuffer.h.

450  {
451  long i, len;
452  *this >> len;
453  for ( i = 0, data[0] = 0; i < len; i++ ) { data[i] = m_buffer[m_pointer++]; }
454  return *this;
455  }

◆ operator>>() [3/14]

StreamBuffer& StreamBuffer::operator>> ( double &  data)
inline

Input Streamer.

Definition at line 445 of file StreamBuffer.h.

445  {
446  swapFromBuffer( &data, sizeof( data ) );
447  return *this;
448  }

◆ operator>>() [4/14]

StreamBuffer& StreamBuffer::operator>> ( float &  data)
inline

Input Streamer.

Definition at line 434 of file StreamBuffer.h.

434  {
435  swapFromBuffer( &data, sizeof( data ) );
436  return *this;
437  }

◆ operator>>() [5/14]

StreamBuffer& StreamBuffer::operator>> ( int &  data)
inline

Input Streamer.

Definition at line 346 of file StreamBuffer.h.

346  {
347  swapFromBuffer( &data, sizeof( data ) );
348  return *this;
349  }

◆ operator>>() [6/14]

StreamBuffer& StreamBuffer::operator>> ( long &  data)
inline

Input Streamer.

Definition at line 368 of file StreamBuffer.h.

368  {
369  swapFromBuffer( &data, sizeof( data ) );
370  return *this;
371  }

◆ operator>>() [7/14]

StreamBuffer& StreamBuffer::operator>> ( long long &  data)
inline

Input Streamer.

Definition at line 335 of file StreamBuffer.h.

335  {
336  swapFromBuffer( &data, sizeof( data ) );
337  return *this;
338  }

◆ operator>>() [8/14]

StreamBuffer& StreamBuffer::operator>> ( short &  data)
inline

Input Streamer.

Definition at line 390 of file StreamBuffer.h.

390  {
391  swapFromBuffer( &data, sizeof( data ) );
392  return *this;
393  }

◆ operator>>() [9/14]

StreamBuffer& StreamBuffer::operator>> ( std::string &  data)
inline

Streamer to read strings in (std::string) format.

Definition at line 466 of file StreamBuffer.h.

466  {
467  long i, len;
468  *this >> len;
469  for ( i = 0, data = ""; i < len; i++ ) { data.append( 1, m_buffer[m_pointer++] ); }
470  return *this;
471  }

◆ operator>>() [10/14]

template<class TYPE >
StreamBuffer& StreamBuffer::operator>> ( TYPE *&  refpObject)
inline

Streamer to read links to contained or identified objects.

The specified internal function call distinguishes between contained and identified objects.

Parameters
refpObjectReference to pointer to object to be loaded.
Returns
Reference to StreamBuffer object

Definition at line 490 of file StreamBuffer.h.

490  {
491  return getObjectPointer( refpObject, refpObject );
492  }

◆ operator>>() [11/14]

StreamBuffer& StreamBuffer::operator>> ( unsigned char &  data)
inline

Input Streamer.

Definition at line 423 of file StreamBuffer.h.

423  {
424  swapFromBuffer( &data, sizeof( data ) );
425  return *this;
426  }

◆ operator>>() [12/14]

StreamBuffer& StreamBuffer::operator>> ( unsigned int &  data)
inline

Input Streamer.

Definition at line 357 of file StreamBuffer.h.

357  {
358  swapFromBuffer( &data, sizeof( data ) );
359  return *this;
360  }

◆ operator>>() [13/14]

StreamBuffer& StreamBuffer::operator>> ( unsigned long &  data)
inline

Input Streamer.

Definition at line 379 of file StreamBuffer.h.

379  {
380  swapFromBuffer( &data, sizeof( data ) );
381  return *this;
382  }

◆ operator>>() [14/14]

StreamBuffer& StreamBuffer::operator>> ( unsigned short &  data)
inline

Input Streamer.

Definition at line 401 of file StreamBuffer.h.

401  {
402  swapFromBuffer( &data, sizeof( data ) );
403  return *this;
404  }

◆ reserve()

void StreamBuffer::reserve ( long  len)
inline

Reserve buffer space; Default: 16 k buffer size.

Definition at line 221 of file StreamBuffer.h.

221  {
222  if ( len > m_length ) {
223  m_length = ( len < 16384 ) ? 16384 : len;
224  m_buffer = (char*)::realloc( m_buffer, m_length );
225  }
226  }

◆ serialize()

void StreamBuffer::serialize ( DataIO ioObject)
inline

Serialize the buffer using an IO object.

The streambuffer object will make use of a DataIO object, which can be specialized for streaming to any representation like e.g. disk files, Root files, Objectivity etc.

Parameters
ioObjectReference to data IO object.

Definition at line 524 of file StreamBuffer.h.

524  {
525  ioObject.serialize( *this );
526  m_pointer = 0;
527  }

◆ setAnalyzer()

void StreamBuffer::setAnalyzer ( AnalyzeFunction  fun = nullptr)
inline

Enable user analysis function.

Definition at line 267 of file StreamBuffer.h.

267 { m_analyzer = fun; }

◆ setBuffPointer()

void StreamBuffer::setBuffPointer ( long  ptr)
inline

Retrieve current buffer pointer.

Definition at line 265 of file StreamBuffer.h.

265 { m_pointer = ptr; }

◆ setMode()

void StreamBuffer::setMode ( Mode  m)
inline

Set mode of the stream and allocate buffer.

Definition at line 250 of file StreamBuffer.h.

250  {
251  m_mode = m;
252  m_pointer = 0;
253  m_containedLinks.erase( m_containedLinks.begin(), m_containedLinks.end() );
254  m_identifiedLinks.erase( m_identifiedLinks.begin(), m_identifiedLinks.end() );
255  }

◆ size()

long StreamBuffer::size ( ) const
inline

Total buffer size.

Definition at line 238 of file StreamBuffer.h.

238 { return m_length; }

◆ swapBuffer()

StreamBuffer::SwapAction StreamBuffer::swapBuffer ( int  siz) const
inlineprotected

Check for byte swapping.

Definition at line 533 of file StreamBuffer.h.

533  {
534  switch ( siz ) {
535  case 1:
536  return SINGLE_BYTE;
537  default:
538 #if defined( __alpha ) && !defined( __VMS )
539  // return m_swapEnabled ? SWAP : NOSWAP;
540  return NOSWAP;
541 #elif defined( __sun ) && defined( __SVR4 ) && defined( __i386 )
542  // return m_swapEnabled ? SWAP : NOSWAP;
543  return NOSWAP;
544 #elif defined( __APPLE__ )
545  // return m_swapEnabled ? SWAP : NOSWAP;
546  return SWAP;
547 #elif defined( __linux ) && !defined( __powerpc )
548  // return m_swapEnabled ? SWAP : NOSWAP;
549  return NOSWAP;
550 #elif defined( BORLAND ) || defined( _WIN32 ) || defined( WIN32 )
551  // return m_swapEnabled ? SWAP : NOSWAP;
552  return NOSWAP;
553 #else
554  return m_swapEnabled ? SWAP : NOSWAP;
555 // return NOSWAP;
556 #endif
557  }
558 }

◆ swapFromBuffer()

void StreamBuffer::swapFromBuffer ( void *  target,
int  siz 
)
inline

Swap buffers: int, long, short, float and double.

Swap bytes from the stream buffer to target buffer with arbitray size.

Definition at line 587 of file StreamBuffer.h.

587  {
588  char* tar = (char*)target;
589  char* src = m_buffer + m_pointer;
590  switch ( swapBuffer( siz ) ) {
591  case SINGLE_BYTE:
592  *tar = *src;
593  break;
594  case SWAP:
595 #ifdef __APPLE__
596  for ( int i = 0, j = siz - 1; i < siz; i++, j-- ) tar[j] = src[i];
597 #else
598  ::_swab( src, tar, siz );
599 #endif
600  break;
601  case NOSWAP:
602  std::copy_n( src, siz, tar );
603  break;
604  default:
605  break;
606  }
607  m_pointer += siz;
608 }

◆ swapToBuffer()

void StreamBuffer::swapToBuffer ( const void *  source,
int  siz 
)
inline

Swap buffers: int, long, short, float and double.

Swap bytes from a source buffer to the stream buffer with arbitray size.

Definition at line 561 of file StreamBuffer.h.

561  {
562  char buff[8], *tar, *src = (char*)source;
563  extend( m_pointer + siz );
564  tar = m_buffer + m_pointer;
565  switch ( swapBuffer( siz ) ) {
566  case SINGLE_BYTE:
567  *tar = *src;
568  break;
569  case SWAP:
570 #ifdef __APPLE__
571  for ( int i = 0, j = siz - 1; i < siz; i++, j-- ) tar[j] = src[i];
572 #else
573  ::_swab( src, buff, siz );
574 #endif
575  src = buff;
576  [[fallthrough]];
577  case NOSWAP:
578  std::copy_n( src, siz, tar );
579  break;
580  default:
581  break;
582  }
583  m_pointer += siz;
584 }

◆ writeBytes()

StreamBuffer& StreamBuffer::writeBytes ( const char *  str,
long  len 
)
inline

Write string to output stream.

Definition at line 275 of file StreamBuffer.h.

275  {
276  extend( m_pointer + len + 4 );
277  *this << len;
278  std::copy_n( str, len, data() + buffPointer() );
279  m_pointer += len;
280  return *this;
281  }

Friends And Related Function Documentation

◆ DataObject

friend class DataObject
friend

DataObject is friend.

Definition at line 146 of file StreamBuffer.h.

Member Data Documentation

◆ m_analyzer

AnalyzeFunction StreamBuffer::m_analyzer = nullptr
protected

Hook function for analysis of data to the stream.

Definition at line 171 of file StreamBuffer.h.

◆ m_buffer

char* StreamBuffer::m_buffer = nullptr
mutableprotected

Pointer to heap buffer.

Definition at line 159 of file StreamBuffer.h.

◆ m_containedLinks

ContainedLinks StreamBuffer::m_containedLinks
mutableprotected

Container with links to contained objects.

Definition at line 165 of file StreamBuffer.h.

◆ m_identifiedLinks

IdentifiedLinks StreamBuffer::m_identifiedLinks
mutableprotected

Container with links to contained objects.

Definition at line 168 of file StreamBuffer.h.

◆ m_length

long StreamBuffer::m_length = 0
mutableprotected

Total buffer length.

Definition at line 156 of file StreamBuffer.h.

◆ m_mode

Mode StreamBuffer::m_mode = UNINITIALIZED
protected

Boolean indicating wether the stream is in read or write mode.

Definition at line 150 of file StreamBuffer.h.

◆ m_pointer

long StreamBuffer::m_pointer = 0
mutableprotected

Current buffer pointer.

Definition at line 153 of file StreamBuffer.h.

◆ m_swapEnabled

bool StreamBuffer::m_swapEnabled = true
protected

Flag indicating swapping.

Definition at line 162 of file StreamBuffer.h.


The documentation for this class was generated from the following file:
StreamBuffer::addIdentifiedLink
void addIdentifiedLink(const DataObject *pObject, long hint)
Definition: StreamBuffer.h:289
StreamBuffer::m_buffer
char * m_buffer
Pointer to heap buffer.
Definition: StreamBuffer.h:159
StreamBuffer::SWAP
@ SWAP
Definition: StreamBuffer.h:115
StreamBuffer::m_containedLinks
ContainedLinks m_containedLinks
Container with links to contained objects.
Definition: StreamBuffer.h:165
StreamBuffer::swapBuffer
SwapAction swapBuffer(int siz) const
Check for byte swapping.
Definition: StreamBuffer.h:533
StreamBuffer::extend
void extend(long len)
Extend the buffer.
Definition: StreamBuffer.h:228
StreamBuffer::m_mode
Mode m_mode
Boolean indicating wether the stream is in read or write mode.
Definition: StreamBuffer.h:150
StreamBuffer::buffPointer
long buffPointer() const
Retrieve current buffer pointer.
Definition: StreamBuffer.h:263
StreamBuffer::m_analyzer
AnalyzeFunction m_analyzer
Hook function for analysis of data to the stream.
Definition: StreamBuffer.h:171
StreamBuffer::swapFromBuffer
void swapFromBuffer(void *target, int siz)
Swap buffers: int, long, short, float and double.
Definition: StreamBuffer.h:587
StreamBuffer::m_swapEnabled
bool m_swapEnabled
Flag indicating swapping.
Definition: StreamBuffer.h:162
StreamBuffer::READING
@ READING
Definition: StreamBuffer.h:113
compareOutputFiles.target
target
Definition: compareOutputFiles.py:489
StreamBuffer::swapToBuffer
void swapToBuffer(const void *source, int siz)
Swap buffers: int, long, short, float and double.
Definition: StreamBuffer.h:561
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:107
ProduceConsume.j
j
Definition: ProduceConsume.py:104
StreamBuffer::SINGLE_BYTE
@ SINGLE_BYTE
Definition: StreamBuffer.h:115
StreamBuffer::writeBytes
StreamBuffer & writeBytes(const char *str, long len)
Write string to output stream.
Definition: StreamBuffer.h:275
StreamBuffer::getObjectPointer
StreamBuffer & getObjectPointer(const DataObject *, TYPE *&refpObject)
Helper to distinguish between identified pointers and contained pointers.
Definition: StreamBuffer.h:180
StreamBuffer::data
const char * data() const
Read access to data buffer.
Definition: StreamBuffer.h:205
StreamBuffer::reserve
void reserve(long len)
Reserve buffer space; Default: 16 k buffer size.
Definition: StreamBuffer.h:221
StreamBuffer::UNINITIALIZED
@ UNINITIALIZED
Definition: StreamBuffer.h:113
gaudirun.l
dictionary l
Definition: gaudirun.py:583
StreamBuffer::m_length
long m_length
Total buffer length.
Definition: StreamBuffer.h:156
StreamBuffer::m_pointer
long m_pointer
Current buffer pointer.
Definition: StreamBuffer.h:153
StreamBuffer::VALID
@ VALID
Definition: StreamBuffer.h:117
DataObject
Definition: DataObject.h:37
_swab
#define _swab(source, target, radix)
Definition: swab.h:17
StreamBuffer::addContainedLink
void addContainedLink(const ContainedObject *pObject, long hint, long link)
Definition: StreamBuffer.h:300
StreamBuffer::NOSWAP
@ NOSWAP
Definition: StreamBuffer.h:115
STREAM_ANALYSE
#define STREAM_ANALYSE(data, len)
Definition: StreamBuffer.h:308
StreamBuffer::WRITING
@ WRITING
Definition: StreamBuffer.h:113
ContainedObject
Definition: ContainedObject.h:37
StreamBuffer::m_identifiedLinks
IdentifiedLinks m_identifiedLinks
Container with links to contained objects.
Definition: StreamBuffer.h:168
StreamBuffer::INVALID
@ INVALID
Definition: StreamBuffer.h:117