The Gaudi Framework  master (b9786168)
Loading...
Searching...
No Matches
StreamBuffer Class Reference

The stream buffer is a small object collecting object data. More...

#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.
 
typedef void(* AnalyzeFunction) (const void *data, int siz, const std::type_info &type)
 Definition of the buffer analyzer.
 

Public Member Functions

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

Protected Member Functions

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

Protected Attributes

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

Friends

class DataObject
 DataObject is friend.
 

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.

◆ SwapAction

Data Sawp actions.

Enumerator
SINGLE_BYTE 
SWAP 
NOSWAP 

Definition at line 115 of file StreamBuffer.h.

Constructor & Destructor Documentation

◆ StreamBuffer() [1/2]

StreamBuffer::StreamBuffer ( bool do_swap = true)
inline

Standard constructor.

Definition at line 201 of file StreamBuffer.h.

201: m_swapEnabled( do_swap ) {}
bool m_swapEnabled
Flag indicating swapping.

◆ ~StreamBuffer()

virtual StreamBuffer::~StreamBuffer ( )
inlinevirtual

Standard destructor.

Definition at line 203 of file StreamBuffer.h.

203{ ::free( m_buffer ); }
char * m_buffer
Pointer to heap buffer.

◆ StreamBuffer() [2/2]

StreamBuffer::StreamBuffer ( const StreamBuffer & )
delete

No copy.

Member Function Documentation

◆ addContainedLink()

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

Definition at line 304 of file StreamBuffer.h.

304 {
305 m_containedLinks.push_back( ContainedLink( const_cast<ContainedObject*>( pObject ), hint, link ) );
306 }
ContainedLinks m_containedLinks
Container with links to contained objects.

◆ addIdentifiedLink()

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

Definition at line 293 of file StreamBuffer.h.

293 {
294 m_identifiedLinks.push_back( IdentifiedLink( const_cast<DataObject*>( pObject ), hint ) );
295 }
IdentifiedLinks m_identifiedLinks
Container with links to contained objects.
friend class DataObject
DataObject is friend.

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

215 {
216 char* ptr = m_buffer;
217 m_containedLinks.erase( m_containedLinks.begin(), m_containedLinks.end() );
219 m_buffer = NULL; // char *
220 m_pointer = 0; // long
221 m_length = 0; // long
222 return ptr;
223 }
long m_pointer
Current buffer pointer.
long m_length
Total buffer length.

◆ buffPointer()

long StreamBuffer::buffPointer ( ) const
inline

Retrieve current buffer pointer.

Definition at line 267 of file StreamBuffer.h.

267{ return m_pointer; }

◆ containedLinks() [1/2]

ContainedLinks & StreamBuffer::containedLinks ( )
inline

Access to contained links.

Definition at line 244 of file StreamBuffer.h.

244{ return m_containedLinks; }

◆ containedLinks() [2/2]

const ContainedLinks & StreamBuffer::containedLinks ( ) const
inline

CONST Access to contained links.

Definition at line 246 of file StreamBuffer.h.

246{ return m_containedLinks; }

◆ data() [1/2]

char * StreamBuffer::data ( )
inline

write access to data buffer

Definition at line 211 of file StreamBuffer.h.

211{ return m_buffer; }

◆ data() [2/2]

const char * StreamBuffer::data ( ) const
inline

Read access to data buffer.

Definition at line 209 of file StreamBuffer.h.

209{ return m_buffer; }

◆ erase()

void StreamBuffer::erase ( )
inline

Reset the buffer.

Definition at line 213 of file StreamBuffer.h.

213{ m_pointer = 0; }

◆ extend()

void StreamBuffer::extend ( long len)
inline

Extend the buffer.

Definition at line 232 of file StreamBuffer.h.

232 {
233 if ( len + m_pointer > m_length ) {
234 // We have to be a bit generous here in order not to run too often
235 // into ::realloc().
236 long new_len = ( m_length < 16384 ) ? 16384 : 2 * m_length;
237 if ( m_length < len ) new_len += len;
238 reserve( new_len );
239 }
240 }
void reserve(long len)
Reserve buffer space; Default: 16 k buffer size.

◆ getContainedLink()

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

Definition at line 297 of file StreamBuffer.h.

297 {
299 pObject = l.first;
300 hint = l.second;
301 link = l.third;
302 m_containedLinks.pop_back();
303 }
dict l
Definition gaudirun.py:583

◆ getIdentifiedLink()

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

Definition at line 287 of file StreamBuffer.h.

287 {
289 pObject = l.first;
290 hint = l.second;
291 m_identifiedLinks.pop_back();
292 }

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

249{ return m_identifiedLinks; }

◆ identifiedLinks() [2/2]

const IdentifiedLinks & StreamBuffer::identifiedLinks ( ) const
inline

CONST Access to identified links.

Definition at line 251 of file StreamBuffer.h.

251{ return m_identifiedLinks; }

◆ isReading()

bool StreamBuffer::isReading ( ) const
inline

Get stream buffer state.

Definition at line 262 of file StreamBuffer.h.

262{ return m_mode == READING; }
Mode m_mode
Boolean indicating wether the stream is in read or write mode.

◆ isWriting()

bool StreamBuffer::isWriting ( ) const
inline

Get stream buffer state.

Definition at line 265 of file StreamBuffer.h.

265{ return m_mode == WRITING; }

◆ operator<<() [1/15]

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

Output Streamer.

Definition at line 410 of file StreamBuffer.h.

410 {
411 swapToBuffer( &data, sizeof( data ) );
412 STREAM_ANALYSE( data, sizeof( data ) );
413 return *this;
414 }
#define STREAM_ANALYSE(data, len)
const char * data() const
Read access to data buffer.
void swapToBuffer(const void *source, int siz)
Swap buffers: int, long, short, float and double.

◆ operator<<() [2/15]

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

Streamer to write strings in (char*) format.

Definition at line 461 of file StreamBuffer.h.

461 {
462 const char* ptr = 0 == data ? "" : data;
463 size_t len = strlen( ptr ) + 1;
464 if ( 0 == m_analyzer )
465 writeBytes( ptr, len );
466 else { STREAM_ANALYSE( data, len ); }
467 return *this;
468 }
AnalyzeFunction m_analyzer
Hook function for analysis of data to the stream.
StreamBuffer & writeBytes(const char *str, long len)
Write string to output stream.

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

504 {
505 STREAM_ANALYSE( pObject, sizeof( pObject ) );
506 addContainedLink( pObject, INVALID, INVALID );
507 return *this;
508 }
void addContainedLink(const ContainedObject *pObject, long hint, long link)

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

516 {
517 STREAM_ANALYSE( pObject, sizeof( pObject ) );
518 addIdentifiedLink( pObject, INVALID );
519 return *this;
520 }
void addIdentifiedLink(const DataObject *pObject, long hint)

◆ operator<<() [5/15]

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

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

Definition at line 477 of file StreamBuffer.h.

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

◆ operator<<() [6/15]

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

Output Streamer.

Definition at line 443 of file StreamBuffer.h.

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

◆ operator<<() [7/15]

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

Output Streamer.

Definition at line 432 of file StreamBuffer.h.

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

◆ operator<<() [8/15]

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

Output Streamer.

Definition at line 344 of file StreamBuffer.h.

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

◆ operator<<() [9/15]

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

Output Streamer.

Definition at line 366 of file StreamBuffer.h.

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

◆ operator<<() [10/15]

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

Output Streamer.

Definition at line 333 of file StreamBuffer.h.

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

◆ operator<<() [11/15]

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

Output Streamer.

Definition at line 388 of file StreamBuffer.h.

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

◆ operator<<() [12/15]

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

Output Streamer.

Definition at line 421 of file StreamBuffer.h.

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

◆ operator<<() [13/15]

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

Output Streamer.

Definition at line 355 of file StreamBuffer.h.

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

◆ operator<<() [14/15]

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

Output Streamer.

Definition at line 377 of file StreamBuffer.h.

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

◆ operator<<() [15/15]

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

Output Streamer.

Definition at line 399 of file StreamBuffer.h.

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

◆ operator=()

StreamBuffer & StreamBuffer::operator= ( const StreamBuffer & )
delete

No assignment.

◆ operator>>() [1/14]

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

Input Streamer.

Definition at line 416 of file StreamBuffer.h.

416 {
417 swapFromBuffer( &data, sizeof( data ) );
418 return *this;
419 }
void swapFromBuffer(void *target, int siz)
Swap buffers: int, long, short, float and double.

◆ operator>>() [2/14]

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

Streamer to read strings in (char*) format.

Definition at line 454 of file StreamBuffer.h.

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

◆ operator>>() [3/14]

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

Input Streamer.

Definition at line 449 of file StreamBuffer.h.

449 {
450 swapFromBuffer( &data, sizeof( data ) );
451 return *this;
452 }

◆ operator>>() [4/14]

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

Input Streamer.

Definition at line 438 of file StreamBuffer.h.

438 {
439 swapFromBuffer( &data, sizeof( data ) );
440 return *this;
441 }

◆ operator>>() [5/14]

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

Input Streamer.

Definition at line 350 of file StreamBuffer.h.

350 {
351 swapFromBuffer( &data, sizeof( data ) );
352 return *this;
353 }

◆ operator>>() [6/14]

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

Input Streamer.

Definition at line 372 of file StreamBuffer.h.

372 {
373 swapFromBuffer( &data, sizeof( data ) );
374 return *this;
375 }

◆ operator>>() [7/14]

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

Input Streamer.

Definition at line 339 of file StreamBuffer.h.

339 {
340 swapFromBuffer( &data, sizeof( data ) );
341 return *this;
342 }

◆ operator>>() [8/14]

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

Input Streamer.

Definition at line 394 of file StreamBuffer.h.

394 {
395 swapFromBuffer( &data, sizeof( data ) );
396 return *this;
397 }

◆ operator>>() [9/14]

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

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

Definition at line 470 of file StreamBuffer.h.

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

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

494 {
495 return getObjectPointer( refpObject, refpObject );
496 }
StreamBuffer & getObjectPointer(const DataObject *, TYPE *&refpObject)
Helper to distinguish between identified pointers and contained pointers.

◆ operator>>() [11/14]

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

Input Streamer.

Definition at line 427 of file StreamBuffer.h.

427 {
428 swapFromBuffer( &data, sizeof( data ) );
429 return *this;
430 }

◆ operator>>() [12/14]

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

Input Streamer.

Definition at line 361 of file StreamBuffer.h.

361 {
362 swapFromBuffer( &data, sizeof( data ) );
363 return *this;
364 }

◆ operator>>() [13/14]

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

Input Streamer.

Definition at line 383 of file StreamBuffer.h.

383 {
384 swapFromBuffer( &data, sizeof( data ) );
385 return *this;
386 }

◆ operator>>() [14/14]

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

Input Streamer.

Definition at line 405 of file StreamBuffer.h.

405 {
406 swapFromBuffer( &data, sizeof( data ) );
407 return *this;
408 }

◆ reserve()

void StreamBuffer::reserve ( long len)
inline

Reserve buffer space; Default: 16 k buffer size.

Definition at line 225 of file StreamBuffer.h.

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

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

528 {
529 ioObject.serialize( *this );
530 m_pointer = 0;
531 }

◆ setAnalyzer()

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

Enable user analysis function.

Definition at line 271 of file StreamBuffer.h.

271{ m_analyzer = fun; }

◆ setBuffPointer()

void StreamBuffer::setBuffPointer ( long ptr)
inline

Retrieve current buffer pointer.

Definition at line 269 of file StreamBuffer.h.

269{ m_pointer = ptr; }

◆ setMode()

void StreamBuffer::setMode ( Mode m)
inline

Set mode of the stream and allocate buffer.

Definition at line 254 of file StreamBuffer.h.

254 {
255 m_mode = m;
256 m_pointer = 0;
257 m_containedLinks.erase( m_containedLinks.begin(), m_containedLinks.end() );
259 }
constexpr double m

◆ size()

long StreamBuffer::size ( ) const
inline

Total buffer size.

Definition at line 242 of file StreamBuffer.h.

242{ return m_length; }

◆ swapBuffer()

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

Check for byte swapping.

Definition at line 537 of file StreamBuffer.h.

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

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

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

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

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

◆ writeBytes()

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

Write string to output stream.

Definition at line 279 of file StreamBuffer.h.

279 {
280 extend( m_pointer + len + 4 );
281 *this << len;
282 std::copy_n( str, len, data() + buffPointer() );
283 m_pointer += len;
284 return *this;
285 }
long buffPointer() const
Retrieve current buffer pointer.

Friends And Related Symbol 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: