Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  master (d98a2936)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
StreamBuffer.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
13 #include <GaudiKernel/Kernel.h>
14 #include <algorithm>
15 #include <cstdlib>
16 #include <cstring>
17 #include <iostream>
18 #include <list>
19 #include <string>
20 #include <typeinfo>
21 #include <unistd.h>
22 #include <vector>
23 
24 class StreamBuffer;
25 class DataObject;
26 class ContainedObject;
27 
47 class StreamBuffer /* : public std::string */
48 {
49 public:
51  class DataIO {
52  public:
54  DataIO() = default;
56  virtual ~DataIO() = default;
58  void badStreamMode() { throw( "Not acceptable stream mode!" ); }
60  virtual void serialize( StreamBuffer& stream ) {
61  if ( stream.isReading() )
62  load( stream );
63  else if ( stream.isWriting() )
64  dump( stream );
65  else
66  badStreamMode();
67  }
69  virtual void load( StreamBuffer& ) { badStreamMode(); }
71  virtual void dump( StreamBuffer& ) { badStreamMode(); }
72  };
73 
75  class Istream : public DataIO {
77  std::istream* m_stream;
78 
79  public:
81  Istream( std::istream& str ) : m_stream( &str ) {}
82 
84  void load( StreamBuffer& stream ) override {
85  // Generic implementation for istreams:
86  int len;
87  ( *m_stream ) >> len;
88  stream.erase();
89  stream.reserve( len );
90  m_stream->read( stream.data(), len );
91  }
92  };
94  class Ostream : public DataIO {
95  std::ostream* m_stream;
96 
97  public:
99  Ostream( std::ostream& str ) : m_stream( &str ) {}
101  virtual ~Ostream() = default;
102 
104  void dump( StreamBuffer& stream ) override {
105  // Generic implementation for ostreams:
106  ( *m_stream ) << stream.buffPointer();
107  m_stream->write( stream.data(), stream.buffPointer() );
108  }
109  };
110 
111 public:
117  enum State { INVALID = -1, VALID };
120  public:
121  ContainedObject* first = nullptr;
122  long second = INVALID;
123  long third = INVALID;
124  ContainedLink() = default;
125  ContainedLink( ContainedObject* pObj, long hint, long link ) : first( pObj ), second( hint ), third( link ) {}
126  ContainedLink( const ContainedLink& copy ) = default;
127  ContainedLink& operator=( const ContainedLink& copy ) = default;
128  };
131  public:
132  DataObject* first = nullptr;
133  long second = INVALID;
134  IdentifiedLink() = default;
135  IdentifiedLink( DataObject* pObj, long hint ) : first( pObj ), second( hint ) {}
136  IdentifiedLink( const IdentifiedLink& copy ) = default;
137  IdentifiedLink& operator=( const IdentifiedLink& copy ) = default;
138  };
139 
140  typedef std::vector<ContainedLink> ContainedLinks;
142  typedef std::vector<IdentifiedLink> IdentifiedLinks;
144  typedef void ( *AnalyzeFunction )( const void* data, int siz, const std::type_info& type );
146  friend class DataObject;
147 
148 protected:
151 
153  mutable long m_pointer = 0;
154 
156  mutable long m_length = 0;
157 
159  mutable char* m_buffer = nullptr;
160 
162  bool m_swapEnabled = true;
163 
166 
169 
172 
174  SwapAction swapBuffer( int siz ) const;
175 
179  template <class TYPE>
180  StreamBuffer& getObjectPointer( const DataObject* /*pObject*/, TYPE*& refpObject ) {
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  }
190  template <class TYPE>
191  StreamBuffer& getObjectPointer( const ContainedObject* /*pObject*/, TYPE*& refpObject ) {
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  }
198 
199 public:
201  StreamBuffer( bool do_swap = true ) : m_swapEnabled( do_swap ) {}
203  virtual ~StreamBuffer() { ::free( m_buffer ); }
205  const char* data() const { return m_buffer; }
207  char* data() { return m_buffer; }
209  void erase() { m_pointer = 0; }
211  char* adopt() const {
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  }
221  void reserve( long len ) {
222  if ( len > m_length ) {
223  m_length = ( len < 16384 ) ? 16384 : len;
224  m_buffer = (char*)::realloc( m_buffer, m_length );
225  }
226  }
228  void extend( long len ) {
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  }
238  long size() const { return m_length; }
242  const ContainedLinks& containedLinks() const { return m_containedLinks; }
243 
248 
250  void setMode( Mode m ) {
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  }
256 
258  bool isReading() const { return m_mode == READING; }
259 
261  bool isWriting() const { return m_mode == WRITING; }
263  long buffPointer() const { return m_pointer; }
265  void setBuffPointer( long ptr ) { m_pointer = ptr; }
267  void setAnalyzer( AnalyzeFunction fun = nullptr ) { m_analyzer = fun; }
269  void swapToBuffer( const void* source, int siz );
270 
272  void swapFromBuffer( void* target, int siz );
273 
275  StreamBuffer& writeBytes( const char* str, long len ) {
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  }
282 
283  void getIdentifiedLink( DataObject*& pObject, long& hint ) {
285  pObject = l.first;
286  hint = l.second;
287  m_identifiedLinks.pop_back();
288  }
289  void addIdentifiedLink( const DataObject* pObject, long hint ) {
290  m_identifiedLinks.push_back( IdentifiedLink( (DataObject*)pObject, hint ) );
291  }
292 
293  void getContainedLink( ContainedObject*& pObject, long& hint, long& link ) {
294  ContainedLink& l = m_containedLinks.back();
295  pObject = l.first;
296  hint = l.second;
297  link = l.third;
298  m_containedLinks.pop_back();
299  }
300  void addContainedLink( const ContainedObject* pObject, long hint, long link ) {
301  m_containedLinks.push_back( ContainedLink( (ContainedObject*)pObject, hint, link ) );
302  }
303 
304 #ifdef USE_STREAM_ANALYSER
305 # define STREAM_ANALYSE( data, len ) \
306  if ( 0 != m_analyzer ) m_analyzer( &data, len, typeid( data ) )
307 #else
308 # define STREAM_ANALYSE( data, len )
309 #endif
310 
311 // Implement streamer macros for primivive data types.
312 #define IMPLEMENT_STREAMER( TYPE ) \
313  /* Output Streamer */ \
314  StreamBuffer& operator<<( TYPE data ) { \
315  swapToBuffer( &data, sizeof( data ) ); \
316  STREAM_ANALYSE( data, sizeof( data ) ); \
317  return *this; \
318  } \
319  /* Input Streamer */ \
320  StreamBuffer& operator>>( TYPE& data ) { \
321  swapFromBuffer( &data, sizeof( data ) ); \
322  return *this; \
323  }
324 // RootCint does not understand this macro....
325 // But we can easily live without it!
326 #undef IMPLEMENT_STREAMER
327 
329  StreamBuffer& operator<<( long long data ) {
330  swapToBuffer( &data, sizeof( data ) );
331  STREAM_ANALYSE( data, sizeof( data ) );
332  return *this;
333  }
335  StreamBuffer& operator>>( long long& data ) {
336  swapFromBuffer( &data, sizeof( data ) );
337  return *this;
338  }
341  swapToBuffer( &data, sizeof( data ) );
342  STREAM_ANALYSE( data, sizeof( data ) );
343  return *this;
344  }
347  swapFromBuffer( &data, sizeof( data ) );
348  return *this;
349  }
351  StreamBuffer& operator<<( unsigned int data ) {
352  swapToBuffer( &data, sizeof( data ) );
353  STREAM_ANALYSE( data, sizeof( data ) );
354  return *this;
355  }
357  StreamBuffer& operator>>( unsigned int& data ) {
358  swapFromBuffer( &data, sizeof( data ) );
359  return *this;
360  }
363  swapToBuffer( &data, sizeof( data ) );
364  STREAM_ANALYSE( data, sizeof( data ) );
365  return *this;
366  }
369  swapFromBuffer( &data, sizeof( data ) );
370  return *this;
371  }
373  StreamBuffer& operator<<( unsigned long data ) {
374  swapToBuffer( &data, sizeof( data ) );
375  STREAM_ANALYSE( data, sizeof( data ) );
376  return *this;
377  }
379  StreamBuffer& operator>>( unsigned long& data ) {
380  swapFromBuffer( &data, sizeof( data ) );
381  return *this;
382  }
385  swapToBuffer( &data, sizeof( data ) );
386  STREAM_ANALYSE( data, sizeof( data ) );
387  return *this;
388  }
391  swapFromBuffer( &data, sizeof( data ) );
392  return *this;
393  }
395  StreamBuffer& operator<<( unsigned short data ) {
396  swapToBuffer( &data, sizeof( data ) );
397  STREAM_ANALYSE( data, sizeof( data ) );
398  return *this;
399  }
401  StreamBuffer& operator>>( unsigned short& data ) {
402  swapFromBuffer( &data, sizeof( data ) );
403  return *this;
404  }
407  swapToBuffer( &data, sizeof( data ) );
408  STREAM_ANALYSE( data, sizeof( data ) );
409  return *this;
410  }
413  swapFromBuffer( &data, sizeof( data ) );
414  return *this;
415  }
417  StreamBuffer& operator<<( unsigned char data ) {
418  swapToBuffer( &data, sizeof( data ) );
419  STREAM_ANALYSE( data, sizeof( data ) );
420  return *this;
421  }
423  StreamBuffer& operator>>( unsigned char& data ) {
424  swapFromBuffer( &data, sizeof( data ) );
425  return *this;
426  }
429  swapToBuffer( &data, sizeof( data ) );
430  STREAM_ANALYSE( data, sizeof( data ) );
431  return *this;
432  }
435  swapFromBuffer( &data, sizeof( data ) );
436  return *this;
437  }
440  swapToBuffer( &data, sizeof( data ) );
441  STREAM_ANALYSE( data, sizeof( data ) );
442  return *this;
443  }
446  swapFromBuffer( &data, sizeof( data ) );
447  return *this;
448  }
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  }
457  StreamBuffer& operator<<( const char* data ) {
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  }
466  StreamBuffer& operator>>( std::string& data ) {
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  }
473  StreamBuffer& operator<<( const std::string& data ) {
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  }
489  template <class TYPE>
490  StreamBuffer& operator>>( TYPE*& refpObject ) {
491  return getObjectPointer( refpObject, refpObject );
492  }
493 
501  STREAM_ANALYSE( pObject, sizeof( pObject ) );
502  addContainedLink( pObject, INVALID, INVALID );
503  return *this;
504  }
505 
512  StreamBuffer& operator<<( const DataObject* pObject ) {
513  STREAM_ANALYSE( pObject, sizeof( pObject ) );
514  addIdentifiedLink( pObject, INVALID );
515  return *this;
516  }
517 
524  void serialize( DataIO& ioObject ) {
525  ioObject.serialize( *this );
526  m_pointer = 0;
527  }
528 };
529 
530 #undef STREAM_ANALYSE
531 
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 #else
551  return m_swapEnabled ? SWAP : NOSWAP;
552 // return NOSWAP;
553 #endif
554  }
555 }
556 
558 inline void StreamBuffer::swapToBuffer( const void* source, int siz ) {
559  char buff[8], *tar, *src = (char*)source;
560  extend( m_pointer + siz );
561  tar = m_buffer + m_pointer;
562  switch ( swapBuffer( siz ) ) {
563  case SINGLE_BYTE:
564  *tar = *src;
565  break;
566  case SWAP:
567 #ifdef __APPLE__
568  for ( int i = 0, j = siz - 1; i < siz; i++, j-- ) tar[j] = src[i];
569 #else
570  ::swab( src, buff, siz );
571 #endif
572  src = buff;
573  [[fallthrough]];
574  case NOSWAP:
575  std::copy_n( src, siz, tar );
576  break;
577  default:
578  break;
579  }
580  m_pointer += siz;
581 }
582 
584 inline void StreamBuffer::swapFromBuffer( void* target, int siz ) {
585  char* tar = (char*)target;
586  char* src = m_buffer + m_pointer;
587  switch ( swapBuffer( siz ) ) {
588  case SINGLE_BYTE:
589  *tar = *src;
590  break;
591  case SWAP:
592 #ifdef __APPLE__
593  for ( int i = 0, j = siz - 1; i < siz; i++, j-- ) tar[j] = src[i];
594 #else
595  ::swab( src, tar, siz );
596 #endif
597  break;
598  case NOSWAP:
599  std::copy_n( src, siz, tar );
600  break;
601  default:
602  break;
603  }
604  m_pointer += siz;
605 }
606 
607 // Output serialize a vector of items
608 template <class T>
609 inline StreamBuffer& operator<<( StreamBuffer& s, const std::vector<T>& v ) {
610  s << v.size();
611  for ( const auto& i : v ) s << i;
612  return s;
613 }
614 
615 // Input serialize a vector of items
616 template <class T>
617 inline StreamBuffer& operator>>( StreamBuffer& s, std::vector<T>& v ) {
618  long i, len;
619  s >> len;
620  v.clear();
621  for ( i = 0; i < len; i++ ) {
622  T temp;
623  s >> temp;
624  v.push_back( temp );
625  }
626  return s;
627 }
628 
629 // Output serialize a list of items
630 template <class T>
631 inline StreamBuffer& operator<<( StreamBuffer& s, const std::list<T>& l ) {
632  s << l.size();
633  for ( const auto& i : l ) s << i;
634  return s;
635 }
636 
637 // Input serialize a list of items
638 template <class T>
639 inline StreamBuffer& operator>>( StreamBuffer& s, std::list<T>& l ) {
640  long len;
641  s >> len;
642  l.clear();
643  for ( long i = 0; i < len; i++ ) {
644  T temp;
645  s >> temp;
646  l.push_back( temp );
647  }
648  return s;
649 }
StreamBuffer::operator<<
StreamBuffer & operator<<(const char *data)
Streamer to write strings in (char*) format.
Definition: StreamBuffer.h:457
StreamBuffer::Istream::m_stream
std::istream * m_stream
Reference to input stream.
Definition: StreamBuffer.h:77
StreamBuffer::identifiedLinks
IdentifiedLinks & identifiedLinks()
Access to identified links.
Definition: StreamBuffer.h:245
StreamBuffer::operator<<
StreamBuffer & operator<<(const std::string &data)
Streamer to write strings in (std::string) format.
Definition: StreamBuffer.h:473
StreamBuffer::operator>>
StreamBuffer & operator>>(int &data)
Input Streamer.
Definition: StreamBuffer.h:346
StreamBuffer::containedLinks
const ContainedLinks & containedLinks() const
CONST Access to contained links.
Definition: StreamBuffer.h:242
StreamBuffer::setBuffPointer
void setBuffPointer(long ptr)
Retrieve current buffer pointer.
Definition: StreamBuffer.h:265
StreamBuffer::adopt
char * adopt() const
Remove the data buffer and pass it to client. It's the client responsability to free the memory.
Definition: StreamBuffer.h:211
Write.stream
stream
Definition: Write.py:32
StreamBuffer::operator>>
StreamBuffer & operator>>(unsigned char &data)
Input Streamer.
Definition: StreamBuffer.h:423
StreamBuffer::operator<<
StreamBuffer & operator<<(float data)
Output Streamer.
Definition: StreamBuffer.h:428
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::StreamBuffer
StreamBuffer(bool do_swap=true)
Standard constructor.
Definition: StreamBuffer.h:201
StreamBuffer::DataIO::~DataIO
virtual ~DataIO()=default
Standard destructor.
StreamBuffer::SWAP
@ SWAP
Definition: StreamBuffer.h:115
StreamBuffer::operator<<
StreamBuffer & operator<<(short data)
Output Streamer.
Definition: StreamBuffer.h:384
StreamBuffer::Ostream::~Ostream
virtual ~Ostream()=default
Standard Destructor.
StreamBuffer::serialize
void serialize(DataIO &ioObject)
Serialize the buffer using an IO object.
Definition: StreamBuffer.h:524
StreamBuffer::m_containedLinks
ContainedLinks m_containedLinks
Container with links to contained objects.
Definition: StreamBuffer.h:165
gaudirun.s
string s
Definition: gaudirun.py:346
StreamBuffer::swapBuffer
SwapAction swapBuffer(int siz) const
Check for byte swapping.
Definition: StreamBuffer.h:533
StreamBuffer::DataIO::badStreamMode
void badStreamMode()
Throw Exception.
Definition: StreamBuffer.h:58
StreamBuffer::DataIO::load
virtual void load(StreamBuffer &)
Template function to load stream data.
Definition: StreamBuffer.h:69
StreamBuffer::extend
void extend(long len)
Extend the buffer.
Definition: StreamBuffer.h:228
StreamBuffer::operator<<
StreamBuffer & operator<<(const DataObject *pObject)
Streamer to write links to identified objects.
Definition: StreamBuffer.h:512
StreamBuffer::operator<<
StreamBuffer & operator<<(unsigned short data)
Output Streamer.
Definition: StreamBuffer.h:395
StreamBuffer::m_mode
Mode m_mode
Boolean indicating wether the stream is in read or write mode.
Definition: StreamBuffer.h:150
StreamBuffer::operator<<
StreamBuffer & operator<<(unsigned long data)
Output Streamer.
Definition: StreamBuffer.h:373
StreamBuffer::SwapAction
SwapAction
Data Sawp actions.
Definition: StreamBuffer.h:115
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::operator<<
StreamBuffer & operator<<(const ContainedObject *pObject)
Streamer to write links to contained objects.
Definition: StreamBuffer.h:500
StreamBuffer::Istream::Istream
Istream(std::istream &str)
Constructor.
Definition: StreamBuffer.h:81
StreamBuffer::operator<<
StreamBuffer & operator<<(double data)
Output Streamer.
Definition: StreamBuffer.h:439
StreamBuffer::swapFromBuffer
void swapFromBuffer(void *target, int siz)
Swap buffers: int, long, short, float and double.
Definition: StreamBuffer.h:584
StreamBuffer::m_swapEnabled
bool m_swapEnabled
Flag indicating swapping.
Definition: StreamBuffer.h:162
StreamBuffer::AnalyzeFunction
void(* AnalyzeFunction)(const void *data, int siz, const std::type_info &type)
Definition of the buffer analyzer.
Definition: StreamBuffer.h:144
StreamBuffer
Definition: StreamBuffer.h:48
StreamBuffer::READING
@ READING
Definition: StreamBuffer.h:113
StreamBuffer::Ostream
Writer for standard output streams.
Definition: StreamBuffer.h:94
StreamBuffer::DataIO::serialize
virtual void serialize(StreamBuffer &stream)
Serialization method: loads/dumps streambuffer content.
Definition: StreamBuffer.h:60
compareOutputFiles.target
target
Definition: compareOutputFiles.py:489
StreamBuffer::operator>>
StreamBuffer & operator>>(unsigned short &data)
Input Streamer.
Definition: StreamBuffer.h:401
StreamBuffer::IdentifiedLinks
std::vector< IdentifiedLink > IdentifiedLinks
Definition of the identifiable link set.
Definition: StreamBuffer.h:142
StreamBuffer::swapToBuffer
void swapToBuffer(const void *source, int siz)
Swap buffers: int, long, short, float and double.
Definition: StreamBuffer.h:558
Gaudi::Units::m
constexpr double m
Definition: SystemOfUnits.h:107
StreamBuffer::State
State
Link state defintions.
Definition: StreamBuffer.h:117
ProduceConsume.j
j
Definition: ProduceConsume.py:104
StreamBuffer::Istream::load
void load(StreamBuffer &stream) override
Data load method.
Definition: StreamBuffer.h:84
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 ContainedObject *, TYPE *&refpObject)
Helper to distinguish between identified pointers and contained pointers.
Definition: StreamBuffer.h:191
operator<<
StreamBuffer & operator<<(StreamBuffer &s, const std::vector< T > &v)
Definition: StreamBuffer.h:609
StreamBuffer::operator>>
StreamBuffer & operator>>(unsigned long &data)
Input Streamer.
Definition: StreamBuffer.h:379
StreamBuffer::getObjectPointer
StreamBuffer & getObjectPointer(const DataObject *, TYPE *&refpObject)
Helper to distinguish between identified pointers and contained pointers.
Definition: StreamBuffer.h:180
StreamBuffer::containedLinks
ContainedLinks & containedLinks()
Access to contained links.
Definition: StreamBuffer.h:240
StreamBuffer::isWriting
bool isWriting() const
Get stream buffer state.
Definition: StreamBuffer.h:261
StreamBuffer::operator<<
StreamBuffer & operator<<(char data)
Output Streamer.
Definition: StreamBuffer.h:406
StreamBuffer::identifiedLinks
const IdentifiedLinks & identifiedLinks() const
CONST Access to identified links.
Definition: StreamBuffer.h:247
StreamBuffer::setMode
void setMode(Mode m)
Set mode of the stream and allocate buffer.
Definition: StreamBuffer.h:250
StreamBuffer::operator<<
StreamBuffer & operator<<(long data)
Output Streamer.
Definition: StreamBuffer.h:362
StreamBuffer::size
long size() const
Total buffer size.
Definition: StreamBuffer.h:238
StreamBuffer::setAnalyzer
void setAnalyzer(AnalyzeFunction fun=nullptr)
Enable user analysis function.
Definition: StreamBuffer.h:267
StreamBuffer::data
char * data()
write access to data buffer
Definition: StreamBuffer.h:207
StreamBuffer::data
const char * data() const
Read access to data buffer.
Definition: StreamBuffer.h:205
StreamBuffer::isReading
bool isReading() const
Get stream buffer state.
Definition: StreamBuffer.h:258
StreamBuffer::~StreamBuffer
virtual ~StreamBuffer()
Standard destructor.
Definition: StreamBuffer.h:203
StreamBuffer::DataIO::dump
virtual void dump(StreamBuffer &)
Template function to save stream data.
Definition: StreamBuffer.h:71
StreamBuffer::reserve
void reserve(long len)
Reserve buffer space; Default: 16 k buffer size.
Definition: StreamBuffer.h:221
StreamBuffer::operator<<
StreamBuffer & operator<<(int data)
Output Streamer.
Definition: StreamBuffer.h:340
StreamBuffer::operator>>
StreamBuffer & operator>>(char *data)
Streamer to read strings in (char*) format.
Definition: StreamBuffer.h:450
StreamBuffer::operator>>
StreamBuffer & operator>>(float &data)
Input Streamer.
Definition: StreamBuffer.h:434
StreamBuffer::operator>>
StreamBuffer & operator>>(std::string &data)
Streamer to read strings in (std::string) format.
Definition: StreamBuffer.h:466
StreamBuffer::operator<<
StreamBuffer & operator<<(long long data)
Output Streamer.
Definition: StreamBuffer.h:329
StreamBuffer::operator>>
StreamBuffer & operator>>(long &data)
Input Streamer.
Definition: StreamBuffer.h:368
StreamBuffer::UNINITIALIZED
@ UNINITIALIZED
Definition: StreamBuffer.h:113
StreamBuffer::Istream
Reader for standard input streams.
Definition: StreamBuffer.h:75
StreamBuffer::Ostream::dump
void dump(StreamBuffer &stream) override
Output dumper.
Definition: StreamBuffer.h:104
gaudirun.type
type
Definition: gaudirun.py:160
StreamBuffer::operator>>
StreamBuffer & operator>>(double &data)
Input Streamer.
Definition: StreamBuffer.h:445
StreamBuffer::Mode
Mode
Streamer mode.
Definition: StreamBuffer.h:113
gaudirun.l
dictionary l
Definition: gaudirun.py:583
Kernel.h
StreamBuffer::operator>>
StreamBuffer & operator>>(short &data)
Input Streamer.
Definition: StreamBuffer.h:390
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::getIdentifiedLink
void getIdentifiedLink(DataObject *&pObject, long &hint)
Definition: StreamBuffer.h:283
StreamBuffer::erase
void erase()
Reset the buffer.
Definition: StreamBuffer.h:209
StreamBuffer::VALID
@ VALID
Definition: StreamBuffer.h:117
DataObject
Definition: DataObject.h:37
StreamBuffer::DataIO
A small base class to handle generic data streaming.
Definition: StreamBuffer.h:51
StreamBuffer::operator>>
StreamBuffer & operator>>(TYPE *&refpObject)
Streamer to read links to contained or identified objects.
Definition: StreamBuffer.h:490
Properties.v
v
Definition: Properties.py:122
operator>>
StreamBuffer & operator>>(StreamBuffer &s, std::vector< T > &v)
Definition: StreamBuffer.h:617
StreamBuffer::DataIO::DataIO
DataIO()=default
Standard constructor.
StreamBuffer::operator<<
StreamBuffer & operator<<(unsigned char data)
Output Streamer.
Definition: StreamBuffer.h:417
StreamBuffer::operator>>
StreamBuffer & operator>>(unsigned int &data)
Input Streamer.
Definition: StreamBuffer.h:357
StreamBuffer::addContainedLink
void addContainedLink(const ContainedObject *pObject, long hint, long link)
Definition: StreamBuffer.h:300
StreamBuffer::Ostream::m_stream
std::ostream * m_stream
Definition: StreamBuffer.h:95
StreamBuffer::NOSWAP
@ NOSWAP
Definition: StreamBuffer.h:115
STREAM_ANALYSE
#define STREAM_ANALYSE(data, len)
Definition: StreamBuffer.h:308
StreamBuffer::operator>>
StreamBuffer & operator>>(long long &data)
Input Streamer.
Definition: StreamBuffer.h:335
StreamBuffer::operator>>
StreamBuffer & operator>>(char &data)
Input Streamer.
Definition: StreamBuffer.h:412
StreamBuffer::WRITING
@ WRITING
Definition: StreamBuffer.h:113
StreamBuffer::ContainedLinks
std::vector< ContainedLink > ContainedLinks
Definition: StreamBuffer.h:140
ContainedObject
Definition: ContainedObject.h:37
StreamBuffer::m_identifiedLinks
IdentifiedLinks m_identifiedLinks
Container with links to contained objects.
Definition: StreamBuffer.h:168
StreamBuffer::getContainedLink
void getContainedLink(ContainedObject *&pObject, long &hint, long &link)
Definition: StreamBuffer.h:293
StreamBuffer::operator<<
StreamBuffer & operator<<(unsigned int data)
Output Streamer.
Definition: StreamBuffer.h:351
StreamBuffer::INVALID
@ INVALID
Definition: StreamBuffer.h:117
StreamBuffer::Ostream::Ostream
Ostream(std::ostream &str)
Standard constructor: pass reference to stream object.
Definition: StreamBuffer.h:99