libdap++  Updated for version 3.14.0
libdap::D4StreamMarshaller Class Reference

Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4's receiver-makes-right scheme. This code adds checksums to the stream and uses the xdr library to encode real values if the underlying representation is not IEEE 754. It also supports computing the checksum only. More...

#include <D4StreamMarshaller.h>

Inheritance diagram for libdap::D4StreamMarshaller:
Inheritance graph
Collaboration diagram for libdap::D4StreamMarshaller:
Collaboration graph

Public Member Functions

virtual void checksum_update (const void *data, unsigned long len)
 
 D4StreamMarshaller (std::ostream &out, bool write_data=true)
 
virtual void dump (std::ostream &strm) const
 dump the contents of this object to the specified ostream More...
 
virtual string get_checksum ()
 
virtual void put_byte (dods_byte val)
 
virtual void put_checksum ()
 Write the checksum Write the checksum for the data sent since the last call to reset_checksum() to the I/O stream associated with this marshaller. Use this to send the checksum, not get_checksum(). More...
 
virtual void put_count (int64_t count)
 
virtual void put_float32 (dods_float32 val)
 
virtual void put_float64 (dods_float64 val)
 
virtual void put_int (int)
 
virtual void put_int16 (dods_int16 val)
 
virtual void put_int32 (dods_int32 val)
 
virtual void put_int64 (dods_int64 val)
 
virtual void put_int8 (dods_int8 val)
 
virtual void put_opaque (char *, unsigned int)
 
virtual void put_opaque_dap4 (const char *val, int64_t len)
 
virtual void put_str (const string &val)
 
virtual void put_uint16 (dods_uint16 val)
 
virtual void put_uint32 (dods_uint32 val)
 
virtual void put_uint64 (dods_uint64 val)
 
virtual void put_url (const string &val)
 
virtual void put_vector (char *val, int64_t num_bytes)
 Write a fixed size vector. More...
 
virtual void put_vector (char *val, int64_t num_elem, int elem_size)
 
virtual void put_vector (char *, int, Vector &)
 
virtual void put_vector (char *, int, int, Vector &)
 
virtual void put_vector_float32 (char *val, int64_t num_elem)
 Write a fixed size vector. More...
 
virtual void put_vector_float64 (char *val, int64_t num_elem)
 Write a fixed size vector of float64s. More...
 
virtual void reset_checksum ()
 
virtual ~D4StreamMarshaller ()
 

Detailed Description

Note
This class uses the Marshaller interface; it could be rewritten to use far fewer methods since all of the put_*() methods take different types.

Definition at line 70 of file D4StreamMarshaller.h.

Constructor & Destructor Documentation

libdap::D4StreamMarshaller::D4StreamMarshaller ( std::ostream &  out,
bool  write_data = true 
)

Build an instance of D4StreamMarshaller. Bind the C++ stream out to this instance. If the write_data parameter is true, write the data in addition to computing and sending the checksum.

Parameters
outWrite to this stream object.
write_dataIf true, write data values. True by default

Definition at line 185 of file D4StreamMarshaller.cc.

libdap::D4StreamMarshaller::~D4StreamMarshaller ( )
virtual

Definition at line 202 of file D4StreamMarshaller.cc.

Member Function Documentation

void libdap::D4StreamMarshaller::checksum_update ( const void *  data,
unsigned long  len 
)
virtual
void libdap::D4StreamMarshaller::dump ( std::ostream &  strm) const
virtual

This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

Parameters
strmC++ i/o stream to dump the object to

Implements libdap::Marshaller.

Definition at line 597 of file D4StreamMarshaller.cc.

References libdap::DapIndent::LMarg().

Here is the call graph for this function:

string libdap::D4StreamMarshaller::get_checksum ( )
virtual

Get the current checksum. It is not possible to continue computing the checksum once this has been called.

Note
This method is not intended to be called often or for inserting the checksum into an I/O stream; see put_checksum(). This is intended for instrumentation code.
Returns
The checksum in a string object that always has eight characters.

Definition at line 226 of file D4StreamMarshaller.cc.

References Crc32::GetCrc32().

Referenced by libdap::D4Group::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_byte ( dods_byte  val)
virtual

Implements libdap::Marshaller.

Definition at line 252 of file D4StreamMarshaller.cc.

References checksum_update(), and DBG.

Referenced by libdap::Byte::serialize(), and libdap::D4Enum::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_checksum ( )
virtual

Definition at line 241 of file D4StreamMarshaller.cc.

References Crc32::GetCrc32().

Referenced by libdap::D4Group::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_count ( int64_t  count)
virtual

Used only for Sequences, where the count must be added to the stream and then the fields sent using separate calls to methods here. The methods put_opaque_dap4(), ..., that need counts sent as prefixes to their data handle it themselves.

Parameters
countHow many elements follow.

Definition at line 411 of file D4StreamMarshaller.cc.

Referenced by libdap::D4Sequence::serialize().

void libdap::D4StreamMarshaller::put_float32 ( dods_float32  val)
virtual

Implements libdap::Marshaller.

Definition at line 298 of file D4StreamMarshaller.cc.

References checksum_update(), and libdap::is_host_big_endian().

Referenced by libdap::Float32::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_float64 ( dods_float64  val)
virtual

Implements libdap::Marshaller.

Definition at line 341 of file D4StreamMarshaller.cc.

References checksum_update(), and libdap::is_host_big_endian().

Referenced by libdap::Float64::serialize().

Here is the call graph for this function:

virtual void libdap::D4StreamMarshaller::put_int ( int  )
inlinevirtual

Implements libdap::Marshaller.

Definition at line 129 of file D4StreamMarshaller.h.

void libdap::D4StreamMarshaller::put_int16 ( dods_int16  val)
virtual

Implements libdap::Marshaller.

Definition at line 274 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::Int16::serialize(), and libdap::D4Enum::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_int32 ( dods_int32  val)
virtual

Implements libdap::Marshaller.

Definition at line 282 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::Int32::serialize(), and libdap::D4Enum::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_int64 ( dods_int64  val)
virtual

Definition at line 290 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::Int64::serialize(), and libdap::D4Enum::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_int8 ( dods_int8  val)
virtual

Definition at line 263 of file D4StreamMarshaller.cc.

References checksum_update(), and DBG.

Referenced by libdap::Int8::serialize(), and libdap::D4Enum::serialize().

Here is the call graph for this function:

virtual void libdap::D4StreamMarshaller::put_opaque ( char *  ,
unsigned int   
)
inlinevirtual

Implements libdap::Marshaller.

Definition at line 122 of file D4StreamMarshaller.h.

void libdap::D4StreamMarshaller::put_opaque_dap4 ( const char *  val,
int64_t  len 
)
virtual

Definition at line 433 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::D4Opaque::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_str ( const string &  val)
virtual

Implements libdap::Marshaller.

Definition at line 416 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by put_url(), libdap::Str::serialize(), and libdap::Vector::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_uint16 ( dods_uint16  val)
virtual

Implements libdap::Marshaller.

Definition at line 379 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::UInt16::serialize(), and libdap::D4Enum::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_uint32 ( dods_uint32  val)
virtual

Implements libdap::Marshaller.

Definition at line 387 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::UInt32::serialize(), and libdap::D4Enum::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_uint64 ( dods_uint64  val)
virtual

Definition at line 395 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::UInt64::serialize(), and libdap::D4Enum::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_url ( const string &  val)
virtual

Implements libdap::Marshaller.

Definition at line 428 of file D4StreamMarshaller.cc.

References put_str().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_vector ( char *  val,
int64_t  num_bytes 
)
virtual
Parameters
valPointer to the data
numNumber of bytes to write

Definition at line 448 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::Vector::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_vector ( char *  val,
int64_t  num_elem,
int  elem_size 
)
virtual

Definition at line 456 of file D4StreamMarshaller.cc.

References checksum_update().

Here is the call graph for this function:

virtual void libdap::D4StreamMarshaller::put_vector ( char *  ,
int  ,
Vector  
)
inlinevirtual

Implements libdap::Marshaller.

Definition at line 138 of file D4StreamMarshaller.h.

virtual void libdap::D4StreamMarshaller::put_vector ( char *  ,
int  ,
int  ,
Vector  
)
inlinevirtual

Implements libdap::Marshaller.

Definition at line 141 of file D4StreamMarshaller.h.

void libdap::D4StreamMarshaller::put_vector_float32 ( char *  val,
int64_t  num_elem 
)
virtual
Note
This method and its companion for float64 exists in case we need to support machine that do not use IEEE754 for their floating point representation.
Parameters
valPointer to the data
numNumber of elements
widthSize of a single element
typeDAP variable type; used to handle float32 and float64 types correctly

Definition at line 502 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::Vector::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::put_vector_float64 ( char *  val,
int64_t  num_elem 
)
virtual
Parameters
valPointer to the data
numNumber of elements
widthSize of a single element
typeDAP variable type; used to handle float32 and float64 types correctly

Definition at line 555 of file D4StreamMarshaller.cc.

References checksum_update().

Referenced by libdap::Vector::serialize().

Here is the call graph for this function:

void libdap::D4StreamMarshaller::reset_checksum ( )
virtual

Initialize the checksum buffer. This resets the checksum calculation.

Definition at line 211 of file D4StreamMarshaller.cc.

References Crc32::Reset().

Referenced by libdap::D4Group::serialize().

Here is the call graph for this function:


The documentation for this class was generated from the following files: