The Gaudi Framework  v37r0 (b608885e)
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 51 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 146 of file StreamBuffer.h.

◆ ContainedLinks

◆ IdentifiedLinks

Definition of the identifiable link set.

Definition at line 144 of file StreamBuffer.h.

Member Enumeration Documentation

◆ Mode

Streamer mode.

Enumerator
UNINITIALIZED 
READING 
WRITING 

Definition at line 117 of file StreamBuffer.h.

◆ State

Link state defintions.

Enumerator
INVALID 
VALID 

Definition at line 121 of file StreamBuffer.h.

121 { INVALID = -1, VALID };

◆ SwapAction

Data Sawp actions.

Enumerator
SINGLE_BYTE 
SWAP 
NOSWAP 

Definition at line 119 of file StreamBuffer.h.

119 { SINGLE_BYTE, SWAP, NOSWAP };

Constructor & Destructor Documentation

◆ StreamBuffer()

StreamBuffer::StreamBuffer ( bool  do_swap = true)
inline

Standard constructor.

Definition at line 203 of file StreamBuffer.h.

203 : m_swapEnabled( do_swap ) {}

◆ ~StreamBuffer()

virtual StreamBuffer::~StreamBuffer ( )
inlinevirtual

Standard destructor.

Definition at line 205 of file StreamBuffer.h.

205 { ::free( m_buffer ); }

Member Function Documentation

◆ addContainedLink()

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

Definition at line 302 of file StreamBuffer.h.

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

◆ addIdentifiedLink()

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

Definition at line 291 of file StreamBuffer.h.

291  {
292  m_identifiedLinks.push_back( IdentifiedLink( (DataObject*)pObject, hint ) );
293  }

◆ 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 213 of file StreamBuffer.h.

213  {
214  char* ptr = m_buffer;
217  m_buffer = NULL; // char *
218  m_pointer = 0; // long
219  m_length = 0; // long
220  return ptr;
221  }

◆ buffPointer()

long StreamBuffer::buffPointer ( ) const
inline

Retrieve current buffer pointer.

Definition at line 265 of file StreamBuffer.h.

265 { return m_pointer; }

◆ containedLinks() [1/2]

ContainedLinks& StreamBuffer::containedLinks ( )
inline

Access to contained links.

Definition at line 242 of file StreamBuffer.h.

242 { return m_containedLinks; }

◆ containedLinks() [2/2]

const ContainedLinks& StreamBuffer::containedLinks ( ) const
inline

CONST Access to contained links.

Definition at line 244 of file StreamBuffer.h.

244 { return m_containedLinks; }

◆ data() [1/2]

char* StreamBuffer::data ( )
inline

write access to data buffer

Definition at line 209 of file StreamBuffer.h.

209 { return m_buffer; }

◆ data() [2/2]

const char* StreamBuffer::data ( ) const
inline

Read access to data buffer.

Definition at line 207 of file StreamBuffer.h.

207 { return m_buffer; }

◆ erase()

void StreamBuffer::erase ( )
inline

Reset the buffer.

Definition at line 211 of file StreamBuffer.h.

211 { m_pointer = 0; }

◆ extend()

void StreamBuffer::extend ( long  len)
inline

Extend the buffer.

Definition at line 230 of file StreamBuffer.h.

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

◆ getContainedLink()

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

Definition at line 295 of file StreamBuffer.h.

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

◆ getIdentifiedLink()

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

Definition at line 285 of file StreamBuffer.h.

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

◆ 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 193 of file StreamBuffer.h.

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

◆ 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 182 of file StreamBuffer.h.

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

◆ identifiedLinks() [1/2]

IdentifiedLinks& StreamBuffer::identifiedLinks ( )
inline

Access to identified links.

Definition at line 247 of file StreamBuffer.h.

247 { return m_identifiedLinks; }

◆ identifiedLinks() [2/2]

const IdentifiedLinks& StreamBuffer::identifiedLinks ( ) const
inline

CONST Access to identified links.

Definition at line 249 of file StreamBuffer.h.

249 { return m_identifiedLinks; }

◆ isReading()

bool StreamBuffer::isReading ( ) const
inline

Get stream buffer state.

Definition at line 260 of file StreamBuffer.h.

260 { return m_mode == READING; }

◆ isWriting()

bool StreamBuffer::isWriting ( ) const
inline

Get stream buffer state.

Definition at line 263 of file StreamBuffer.h.

263 { return m_mode == WRITING; }

◆ operator<<() [1/15]

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

Output Streamer.

Definition at line 408 of file StreamBuffer.h.

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

◆ operator<<() [2/15]

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

Streamer to write strings in (char*) format.

Definition at line 459 of file StreamBuffer.h.

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

◆ 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 502 of file StreamBuffer.h.

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

◆ 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 514 of file StreamBuffer.h.

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

◆ operator<<() [5/15]

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

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

Definition at line 475 of file StreamBuffer.h.

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

◆ operator<<() [6/15]

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

Output Streamer.

Definition at line 441 of file StreamBuffer.h.

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

◆ operator<<() [7/15]

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

Output Streamer.

Definition at line 430 of file StreamBuffer.h.

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

◆ operator<<() [8/15]

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

Output Streamer.

Definition at line 342 of file StreamBuffer.h.

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

◆ operator<<() [9/15]

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

Output Streamer.

Definition at line 364 of file StreamBuffer.h.

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

◆ operator<<() [10/15]

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

Output Streamer.

Definition at line 331 of file StreamBuffer.h.

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

◆ operator<<() [11/15]

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

Output Streamer.

Definition at line 386 of file StreamBuffer.h.

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

◆ operator<<() [12/15]

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

Output Streamer.

Definition at line 419 of file StreamBuffer.h.

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

◆ operator<<() [13/15]

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

Output Streamer.

Definition at line 353 of file StreamBuffer.h.

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

◆ operator<<() [14/15]

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

Output Streamer.

Definition at line 375 of file StreamBuffer.h.

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

◆ operator<<() [15/15]

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

Output Streamer.

Definition at line 397 of file StreamBuffer.h.

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

◆ operator>>() [1/14]

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

Input Streamer.

Definition at line 414 of file StreamBuffer.h.

414  {
415  swapFromBuffer( &data, sizeof( data ) );
416  return *this;
417  }

◆ operator>>() [2/14]

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

Streamer to read strings in (char*) format.

Definition at line 452 of file StreamBuffer.h.

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

◆ operator>>() [3/14]

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

Input Streamer.

Definition at line 447 of file StreamBuffer.h.

447  {
448  swapFromBuffer( &data, sizeof( data ) );
449  return *this;
450  }

◆ operator>>() [4/14]

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

Input Streamer.

Definition at line 436 of file StreamBuffer.h.

436  {
437  swapFromBuffer( &data, sizeof( data ) );
438  return *this;
439  }

◆ operator>>() [5/14]

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

Input Streamer.

Definition at line 348 of file StreamBuffer.h.

348  {
349  swapFromBuffer( &data, sizeof( data ) );
350  return *this;
351  }

◆ operator>>() [6/14]

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

Input Streamer.

Definition at line 370 of file StreamBuffer.h.

370  {
371  swapFromBuffer( &data, sizeof( data ) );
372  return *this;
373  }

◆ operator>>() [7/14]

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

Input Streamer.

Definition at line 337 of file StreamBuffer.h.

337  {
338  swapFromBuffer( &data, sizeof( data ) );
339  return *this;
340  }

◆ operator>>() [8/14]

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

Input Streamer.

Definition at line 392 of file StreamBuffer.h.

392  {
393  swapFromBuffer( &data, sizeof( data ) );
394  return *this;
395  }

◆ operator>>() [9/14]

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

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

Definition at line 468 of file StreamBuffer.h.

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

◆ 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 492 of file StreamBuffer.h.

492  {
493  return getObjectPointer( refpObject, refpObject );
494  }

◆ operator>>() [11/14]

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

Input Streamer.

Definition at line 425 of file StreamBuffer.h.

425  {
426  swapFromBuffer( &data, sizeof( data ) );
427  return *this;
428  }

◆ operator>>() [12/14]

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

Input Streamer.

Definition at line 359 of file StreamBuffer.h.

359  {
360  swapFromBuffer( &data, sizeof( data ) );
361  return *this;
362  }

◆ operator>>() [13/14]

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

Input Streamer.

Definition at line 381 of file StreamBuffer.h.

381  {
382  swapFromBuffer( &data, sizeof( data ) );
383  return *this;
384  }

◆ operator>>() [14/14]

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

Input Streamer.

Definition at line 403 of file StreamBuffer.h.

403  {
404  swapFromBuffer( &data, sizeof( data ) );
405  return *this;
406  }

◆ reserve()

void StreamBuffer::reserve ( long  len)
inline

Reserve buffer space; Default: 16 k buffer size.

Definition at line 223 of file StreamBuffer.h.

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

◆ 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 526 of file StreamBuffer.h.

526  {
527  ioObject.serialize( *this );
528  m_pointer = 0;
529  }

◆ setAnalyzer()

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

Enable user analysis function.

Definition at line 269 of file StreamBuffer.h.

269 { m_analyzer = fun; }

◆ setBuffPointer()

void StreamBuffer::setBuffPointer ( long  ptr)
inline

Retrieve current buffer pointer.

Definition at line 267 of file StreamBuffer.h.

267 { m_pointer = ptr; }

◆ setMode()

void StreamBuffer::setMode ( Mode  m)
inline

Set mode of the stream and allocate buffer.

Definition at line 252 of file StreamBuffer.h.

◆ size()

long StreamBuffer::size ( ) const
inline

Total buffer size.

Definition at line 240 of file StreamBuffer.h.

240 { return m_length; }

◆ swapBuffer()

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

Check for byte swapping.

Definition at line 535 of file StreamBuffer.h.

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

◆ 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 589 of file StreamBuffer.h.

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

◆ 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 563 of file StreamBuffer.h.

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

◆ writeBytes()

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

Write string to output stream.

Definition at line 277 of file StreamBuffer.h.

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

Friends And Related Function Documentation

◆ DataObject

friend class DataObject
friend

DataObject is friend.

Definition at line 148 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 173 of file StreamBuffer.h.

◆ m_buffer

char* StreamBuffer::m_buffer = nullptr
mutableprotected

Pointer to heap buffer.

Definition at line 161 of file StreamBuffer.h.

◆ m_containedLinks

ContainedLinks StreamBuffer::m_containedLinks
mutableprotected

Container with links to contained objects.

Definition at line 167 of file StreamBuffer.h.

◆ m_identifiedLinks

IdentifiedLinks StreamBuffer::m_identifiedLinks
mutableprotected

Container with links to contained objects.

Definition at line 170 of file StreamBuffer.h.

◆ m_length

long StreamBuffer::m_length = 0
mutableprotected

Total buffer length.

Definition at line 158 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 152 of file StreamBuffer.h.

◆ m_pointer

long StreamBuffer::m_pointer = 0
mutableprotected

Current buffer pointer.

Definition at line 155 of file StreamBuffer.h.

◆ m_swapEnabled

bool StreamBuffer::m_swapEnabled = true
protected

Flag indicating swapping.

Definition at line 164 of file StreamBuffer.h.


The documentation for this class was generated from the following file:
std::strlen
T strlen(T... args)
StreamBuffer::addIdentifiedLink
void addIdentifiedLink(const DataObject *pObject, long hint)
Definition: StreamBuffer.h:291
StreamBuffer::m_buffer
char * m_buffer
Pointer to heap buffer.
Definition: StreamBuffer.h:161
StreamBuffer::SWAP
@ SWAP
Definition: StreamBuffer.h:119
StreamBuffer::m_containedLinks
ContainedLinks m_containedLinks
Container with links to contained objects.
Definition: StreamBuffer.h:167
StreamBuffer::swapBuffer
SwapAction swapBuffer(int siz) const
Check for byte swapping.
Definition: StreamBuffer.h:535
StreamBuffer::extend
void extend(long len)
Extend the buffer.
Definition: StreamBuffer.h:230
StreamBuffer::m_mode
Mode m_mode
Boolean indicating wether the stream is in read or write mode.
Definition: StreamBuffer.h:152
StreamBuffer::buffPointer
long buffPointer() const
Retrieve current buffer pointer.
Definition: StreamBuffer.h:265
StreamBuffer::m_analyzer
AnalyzeFunction m_analyzer
Hook function for analysis of data to the stream.
Definition: StreamBuffer.h:173
std::vector::back
T back(T... args)
StreamBuffer::swapFromBuffer
void swapFromBuffer(void *target, int siz)
Swap buffers: int, long, short, float and double.
Definition: StreamBuffer.h:589
StreamBuffer::m_swapEnabled
bool m_swapEnabled
Flag indicating swapping.
Definition: StreamBuffer.h:164
StreamBuffer::READING
@ READING
Definition: StreamBuffer.h:117
std::vector::push_back
T push_back(T... args)
compareOutputFiles.target
target
Definition: compareOutputFiles.py:489
std::copy_n
T copy_n(T... args)
StreamBuffer::swapToBuffer
void swapToBuffer(const void *source, int siz)
Swap buffers: int, long, short, float and double.
Definition: StreamBuffer.h:563
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:108
ProduceConsume.j
j
Definition: ProduceConsume.py:101
StreamBuffer::SINGLE_BYTE
@ SINGLE_BYTE
Definition: StreamBuffer.h:119
StreamBuffer::writeBytes
StreamBuffer & writeBytes(const char *str, long len)
Write string to output stream.
Definition: StreamBuffer.h:277
StreamBuffer::getObjectPointer
StreamBuffer & getObjectPointer(const DataObject *, TYPE *&refpObject)
Helper to distinguish between identified pointers and contained pointers.
Definition: StreamBuffer.h:182
std::vector::erase
T erase(T... args)
StreamBuffer::data
const char * data() const
Read access to data buffer.
Definition: StreamBuffer.h:207
std::vector::pop_back
T pop_back(T... args)
StreamBuffer::reserve
void reserve(long len)
Reserve buffer space; Default: 16 k buffer size.
Definition: StreamBuffer.h:223
StreamBuffer::UNINITIALIZED
@ UNINITIALIZED
Definition: StreamBuffer.h:117
std::realloc
T realloc(T... args)
gaudirun.l
dictionary l
Definition: gaudirun.py:582
std::vector::begin
T begin(T... args)
StreamBuffer::m_length
long m_length
Total buffer length.
Definition: StreamBuffer.h:158
StreamBuffer::m_pointer
long m_pointer
Current buffer pointer.
Definition: StreamBuffer.h:155
StreamBuffer::VALID
@ VALID
Definition: StreamBuffer.h:121
DataObject
Definition: DataObject.h:40
std::vector::end
T end(T... args)
_swab
#define _swab(source, target, radix)
Definition: swab.h:17
StreamBuffer::addContainedLink
void addContainedLink(const ContainedObject *pObject, long hint, long link)
Definition: StreamBuffer.h:302
StreamBuffer::NOSWAP
@ NOSWAP
Definition: StreamBuffer.h:119
STREAM_ANALYSE
#define STREAM_ANALYSE(data, len)
Definition: StreamBuffer.h:310
StreamBuffer::WRITING
@ WRITING
Definition: StreamBuffer.h:117
ContainedObject
Definition: ContainedObject.h:41
StreamBuffer::m_identifiedLinks
IdentifiedLinks m_identifiedLinks
Container with links to contained objects.
Definition: StreamBuffer.h:170
StreamBuffer::INVALID
@ INVALID
Definition: StreamBuffer.h:121