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>
|
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
|
|
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().
|
|
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 *, int, int, Vector &) |
|
virtual void | put_vector (char *, int, Vector &) |
|
virtual void | put_vector (char *val, int64_t num_bytes) |
| Write a fixed size vector.
|
|
virtual void | put_vector (char *val, int64_t num_elem, int elem_size) |
|
virtual void | put_vector_end () |
|
virtual void | put_vector_float32 (char *val, int64_t num_elem) |
| Write a fixed size vector.
|
|
virtual void | put_vector_float64 (char *val, int64_t num_elem) |
| Write a fixed size vector of float64s.
|
|
virtual void | put_vector_part (char *, unsigned int, int, Type) |
|
virtual void | put_vector_start (int) |
|
virtual void | reset_checksum () |
|
virtual | ~D4StreamMarshaller () |
|
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.
- 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 71 of file D4StreamMarshaller.h.
◆ D4StreamMarshaller()
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
-
out | Write to this stream object. |
write_data | If true, write data values. True by default |
Definition at line 198 of file D4StreamMarshaller.cc.
◆ ~D4StreamMarshaller()
libdap::D4StreamMarshaller::~D4StreamMarshaller |
( |
| ) |
|
|
virtual |
◆ checksum_update()
void libdap::D4StreamMarshaller::checksum_update |
( |
const void * | data, |
|
|
unsigned long | len ) |
|
virtual |
Update the current CRC 32 checksum value. Calling this with len equal to zero has no effect on the checksum value.
Definition at line 265 of file D4StreamMarshaller.cc.
◆ dump()
void libdap::D4StreamMarshaller::dump |
( |
std::ostream & | strm | ) |
const |
|
virtual |
dump the contents of this object to the specified ostream
This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...
- Parameters
-
strm | C++ i/o stream to dump the object to |
Implements libdap::Marshaller.
Definition at line 783 of file D4StreamMarshaller.cc.
◆ get_checksum()
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 239 of file D4StreamMarshaller.cc.
◆ put_byte()
void libdap::D4StreamMarshaller::put_byte |
( |
dods_byte | val | ) |
|
|
virtual |
◆ put_checksum()
void libdap::D4StreamMarshaller::put_checksum |
( |
| ) |
|
|
virtual |
◆ put_count()
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
-
count | How many elements follow. |
Definition at line 466 of file D4StreamMarshaller.cc.
◆ put_float32()
void libdap::D4StreamMarshaller::put_float32 |
( |
dods_float32 | val | ) |
|
|
virtual |
◆ put_float64()
void libdap::D4StreamMarshaller::put_float64 |
( |
dods_float64 | val | ) |
|
|
virtual |
◆ put_int()
virtual void libdap::D4StreamMarshaller::put_int |
( |
int | | ) |
|
|
inlinevirtual |
◆ put_int16()
void libdap::D4StreamMarshaller::put_int16 |
( |
dods_int16 | val | ) |
|
|
virtual |
◆ put_int32()
void libdap::D4StreamMarshaller::put_int32 |
( |
dods_int32 | val | ) |
|
|
virtual |
◆ put_int64()
void libdap::D4StreamMarshaller::put_int64 |
( |
dods_int64 | val | ) |
|
|
virtual |
◆ put_int8()
void libdap::D4StreamMarshaller::put_int8 |
( |
dods_int8 | val | ) |
|
|
virtual |
◆ put_opaque()
virtual void libdap::D4StreamMarshaller::put_opaque |
( |
char * | , |
|
|
unsigned int | ) |
|
inlinevirtual |
◆ put_opaque_dap4()
void libdap::D4StreamMarshaller::put_opaque_dap4 |
( |
const char * | val, |
|
|
int64_t | len ) |
|
virtual |
◆ put_str()
void libdap::D4StreamMarshaller::put_str |
( |
const string & | val | ) |
|
|
virtual |
◆ put_uint16()
void libdap::D4StreamMarshaller::put_uint16 |
( |
dods_uint16 | val | ) |
|
|
virtual |
◆ put_uint32()
void libdap::D4StreamMarshaller::put_uint32 |
( |
dods_uint32 | val | ) |
|
|
virtual |
◆ put_uint64()
void libdap::D4StreamMarshaller::put_uint64 |
( |
dods_uint64 | val | ) |
|
|
virtual |
◆ put_url()
void libdap::D4StreamMarshaller::put_url |
( |
const string & | val | ) |
|
|
virtual |
◆ put_vector() [1/4]
virtual void libdap::D4StreamMarshaller::put_vector |
( |
char * | , |
|
|
int | , |
|
|
int | , |
|
|
Vector & | ) |
|
inlinevirtual |
◆ put_vector() [2/4]
virtual void libdap::D4StreamMarshaller::put_vector |
( |
char * | , |
|
|
int | , |
|
|
Vector & | ) |
|
inlinevirtual |
◆ put_vector() [3/4]
void libdap::D4StreamMarshaller::put_vector |
( |
char * | val, |
|
|
int64_t | num_bytes ) |
|
virtual |
Write a fixed size vector.
- Parameters
-
val | Pointer to the data |
num | Number of bytes to write |
Definition at line 517 of file D4StreamMarshaller.cc.
◆ put_vector() [4/4]
void libdap::D4StreamMarshaller::put_vector |
( |
char * | val, |
|
|
int64_t | num_elem, |
|
|
int | elem_size ) |
|
virtual |
◆ put_vector_end()
virtual void libdap::D4StreamMarshaller::put_vector_end |
( |
| ) |
|
|
inlinevirtual |
◆ put_vector_float32()
void libdap::D4StreamMarshaller::put_vector_float32 |
( |
char * | val, |
|
|
int64_t | num_elem ) |
|
virtual |
Write a fixed size vector.
- 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
-
val | Pointer to the data |
num | Number of elements |
width | Size of a single element |
type | DAP variable type; used to handle float32 and float64 types correctly |
Definition at line 594 of file D4StreamMarshaller.cc.
◆ put_vector_float64()
void libdap::D4StreamMarshaller::put_vector_float64 |
( |
char * | val, |
|
|
int64_t | num_elem ) |
|
virtual |
Write a fixed size vector of float64s.
- Parameters
-
val | Pointer to the data |
num | Number of elements |
width | Size of a single element |
type | DAP variable type; used to handle float32 and float64 types correctly |
Definition at line 666 of file D4StreamMarshaller.cc.
◆ put_vector_part()
void libdap::D4StreamMarshaller::put_vector_part |
( |
char * | , |
|
|
unsigned int | , |
|
|
int | , |
|
|
Type | ) |
|
virtual |
Write one part of a vector's contents.
- Parameters
-
val | Pointer to the part's values |
num | The number of values in this part |
width | The number of bytes per value |
type | The DAP2 data type for each value |
Reimplemented from libdap::Marshaller.
Definition at line 726 of file D4StreamMarshaller.cc.
◆ put_vector_start()
virtual void libdap::D4StreamMarshaller::put_vector_start |
( |
int | | ) |
|
|
inlinevirtual |
◆ reset_checksum()
void libdap::D4StreamMarshaller::reset_checksum |
( |
| ) |
|
|
virtual |
Initialize the checksum buffer. This resets the checksum calculation.
Definition at line 227 of file D4StreamMarshaller.cc.
The documentation for this class was generated from the following files: