Panda3D
Public Member Functions | Static Public Member Functions | List of all members
Datagram Class Reference

An ordered list of data elements, formatted in memory for transmission over a socket or writing to a data file. More...

#include "datagram.h"

Inheritance diagram for Datagram:
TypedObject MemoryBase NetDatagram

Public Member Functions

 Datagram (const void *data, size_t size)
 Constructs a datagram from an existing block of data. More...
 
 Datagram (vector_uchar data)
 Constructs a datagram from an existing block of data. More...
 
 Datagram (const Datagram &copy)=default
 
 Datagram (Datagram &&from) noexcept=default
 
void add_be_float32 (PN_float32 value)
 Adds a 32-bit single-precision big-endian floating-point number to the datagram. More...
 
void add_be_float64 (PN_float64 value)
 Adds a 64-bit big-endian floating-point number to the datagram. More...
 
void add_be_int16 (int16_t value)
 Adds a signed 16-bit big-endian integer to the datagram. More...
 
void add_be_int32 (int32_t value)
 Adds a signed 32-bit big-endian integer to the datagram. More...
 
void add_be_int64 (int64_t value)
 Adds a signed 64-bit big-endian integer to the datagram. More...
 
void add_be_uint16 (uint16_t value)
 Adds an unsigned 16-bit big-endian integer to the datagram. More...
 
void add_be_uint32 (uint32_t value)
 Adds an unsigned 32-bit big-endian integer to the datagram. More...
 
void add_be_uint64 (uint64_t value)
 Adds an unsigned 64-bit big-endian integer to the datagram. More...
 
void add_blob (const vector_uchar &)
 Adds a variable-length binary blob to the datagram. More...
 
void add_blob32 (const vector_uchar &)
 Adds a variable-length binary blob to the datagram, using a 32-bit length field to allow very long blobs. More...
 
void add_bool (bool value)
 Adds a boolean value to the datagram. More...
 
void add_fixed_string (const std::string &str, size_t size)
 Adds a fixed-length string to the datagram. More...
 
void add_float32 (PN_float32 value)
 Adds a 32-bit single-precision floating-point number to the datagram. More...
 
void add_float64 (PN_float64 value)
 Adds a 64-bit floating-point number to the datagram. More...
 
void add_int16 (int16_t value)
 Adds a signed 16-bit integer to the datagram. More...
 
void add_int32 (int32_t value)
 Adds a signed 32-bit integer to the datagram. More...
 
void add_int64 (int64_t value)
 Adds a signed 64-bit integer to the datagram. More...
 
void add_int8 (int8_t value)
 Adds a signed 8-bit integer to the datagram. More...
 
void add_stdfloat (PN_stdfloat value)
 Adds either a 32-bit or a 64-bit floating-point number, according to set_stdfloat_double(). More...
 
void add_string (const std::string &str)
 Adds a variable-length string to the datagram. More...
 
void add_string32 (const std::string &str)
 Adds a variable-length string to the datagram, using a 32-bit length field to allow very long strings. More...
 
void add_uint16 (uint16_t value)
 Adds an unsigned 16-bit integer to the datagram. More...
 
void add_uint32 (uint32_t value)
 Adds an unsigned 32-bit integer to the datagram. More...
 
void add_uint64 (uint64_t value)
 Adds an unsigned 64-bit integer to the datagram. More...
 
void add_uint8 (uint8_t value)
 Adds an unsigned 8-bit integer to the datagram. More...
 
void add_wstring (const std::wstring &str)
 Adds a variable-length wstring to the datagram. More...
 
void add_z_string (const std::string &str)
 Adds a variable-length string to the datagram, as a NULL-terminated string. More...
 
void append_data (const void *data, size_t size)
 Appends some more raw data to the end of the datagram. More...
 
void append_data (const vector_uchar &data)
 Appends some more raw data to the end of the datagram. More...
 
void assign (const void *data, size_t size)
 Replaces the datagram's data with the indicated block. More...
 
virtual void clear ()
 Resets the datagram to empty, in preparation for building up a new datagram. More...
 
void copy_array (CPTA_uchar data)
 Replaces the data in the Datagram with a copy of the data in the indicated CPTA_uchar. More...
 
void dump_hex (std::ostream &out, unsigned int indent=0) const
 Writes a representation of the entire datagram contents, as a sequence of hex (and ASCII) values. More...
 
virtual TypeHandle force_init_type ()
 
CPTA_uchar get_array () const
 Returns a const pointer to the actual data in the Datagram. More...
 
const void * get_data () const
 Returns a pointer to the beginning of the datagram's data. More...
 
size_t get_length () const
 Returns the number of bytes in the datagram. More...
 
std::string get_message () const
 Returns the datagram's data as a string. More...
 
bool get_stdfloat_double () const
 Returns the stdfloat_double flag. More...
 
virtual TypeHandle get_type () const
 
PTA_uchar modify_array ()
 Returns a modifiable pointer to the actual data in the Datagram. More...
 
bool operator != (const Datagram &other) const
 
bool operator< (const Datagram &other) const
 
Datagramoperator= (const Datagram &copy)=default
 
Datagramoperator= (Datagram &&from) noexcept=default
 
bool operator== (const Datagram &other) const
 
void output (std::ostream &out) const
 Write a string representation of this instance to <out>. More...
 
void pad_bytes (size_t size)
 Adds the indicated number of zero bytes to the datagram. More...
 
void set_array (PTA_uchar data)
 Replaces the data in the Datagram with the data in the indicated PTA_uchar. More...
 
void set_stdfloat_double (bool stdfloat_double)
 Changes the stdfloat_double flag, which defines the operation performed by add_stdfloat() and DatagramIterator::get_stdfloat(). More...
 
void write (std::ostream &out, unsigned int indent=0) const
 Write a string representation of this instance to <out>. More...
 
- Public Member Functions inherited from TypedObject
 TypedObject (const TypedObject &copy)=default
 
TypedObjectas_typed_object ()
 Returns the object, upcast (if necessary) to a TypedObject pointer. More...
 
const TypedObjectas_typed_object () const
 Returns the object, upcast (if necessary) to a TypedObject pointer. More...
 
int get_best_parent_from_Set (const std::set< int > &) const
 
int get_type_index () const
 Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. More...
 
bool is_exact_type (TypeHandle handle) const
 Returns true if the current object is the indicated type exactly. More...
 
bool is_of_type (TypeHandle handle) const
 Returns true if the current object is or derives from the indicated type. More...
 
TypedObjectoperator= (const TypedObject &copy)=default
 

Static Public Member Functions

static TypeHandle get_class_type ()
 
static void init_type ()
 
- Static Public Member Functions inherited from TypedObject
static TypeHandle get_class_type ()
 
static void init_type ()
 This function is declared non-inline to work around a compiler bug in g++ 2.96. More...
 

Additional Inherited Members

- Public Attributes inherited from TypedObject
 get_type
 

Detailed Description

An ordered list of data elements, formatted in memory for transmission over a socket or writing to a data file.

Data elements should be added one at a time, in order, to the Datagram. The nature and contents of the data elements are totally up to the user. When a Datagram has been transmitted and received, its data elements may be extracted using a DatagramIterator; it is up to the caller to know the correct type of each data element in order.

A Datagram is itself headerless; it is simply a collection of data elements.

Definition at line 38 of file datagram.h.

Constructor & Destructor Documentation

◆ Datagram() [1/2]

Datagram::Datagram ( const void *  data,
size_t  size 
)
inline

Constructs a datagram from an existing block of data.

Definition at line 18 of file datagram.I.

◆ Datagram() [2/2]

Datagram::Datagram ( vector_uchar  data)
inlineexplicit

Constructs a datagram from an existing block of data.

Definition at line 26 of file datagram.I.

Member Function Documentation

◆ add_be_float32()

void Datagram::add_be_float32 ( PN_float32  value)
inline

Adds a 32-bit single-precision big-endian floating-point number to the datagram.

Definition at line 200 of file datagram.I.

References append_data(), and ReversedNumericData::get_data().

Referenced by FltMaterial::build_14_record().

◆ add_be_float64()

void Datagram::add_be_float64 ( PN_float64  value)
inline

Adds a 64-bit big-endian floating-point number to the datagram.

Definition at line 209 of file datagram.I.

References append_data(), and ReversedNumericData::get_data().

◆ add_be_int16()

void Datagram::add_be_int16 ( int16_t  value)
inline

Adds a signed 16-bit big-endian integer to the datagram.

Definition at line 145 of file datagram.I.

References append_data(), and ReversedNumericData::get_data().

◆ add_be_int32()

void Datagram::add_be_int32 ( int32_t  value)
inline

Adds a signed 32-bit big-endian integer to the datagram.

Definition at line 154 of file datagram.I.

References append_data(), and ReversedNumericData::get_data().

◆ add_be_int64()

void Datagram::add_be_int64 ( int64_t  value)
inline

Adds a signed 64-bit big-endian integer to the datagram.

Definition at line 163 of file datagram.I.

References append_data(), and ReversedNumericData::get_data().

◆ add_be_uint16()

void Datagram::add_be_uint16 ( uint16_t  value)
inline

Adds an unsigned 16-bit big-endian integer to the datagram.

Definition at line 172 of file datagram.I.

References append_data(), and ReversedNumericData::get_data().

◆ add_be_uint32()

void Datagram::add_be_uint32 ( uint32_t  value)
inline

Adds an unsigned 32-bit big-endian integer to the datagram.

Definition at line 181 of file datagram.I.

References append_data(), and ReversedNumericData::get_data().

Referenced by FltMaterial::build_14_record().

◆ add_be_uint64()

void Datagram::add_be_uint64 ( uint64_t  value)
inline

Adds an unsigned 64-bit big-endian integer to the datagram.

Definition at line 190 of file datagram.I.

References append_data(), and ReversedNumericData::get_data().

◆ add_blob()

void Datagram::add_blob ( const vector_uchar &  data)
inline

Adds a variable-length binary blob to the datagram.

This actually adds a count followed by n bytes.

Definition at line 278 of file datagram.I.

◆ add_blob32()

void Datagram::add_blob32 ( const vector_uchar &  data)
inline

Adds a variable-length binary blob to the datagram, using a 32-bit length field to allow very long blobs.

Definition at line 294 of file datagram.I.

◆ add_bool()

void Datagram::add_bool ( bool  value)
inline

◆ add_fixed_string()

void Datagram::add_fixed_string ( const std::string &  str,
size_t  size 
)
inline

Adds a fixed-length string to the datagram.

If the string given is less than the requested size, this will pad the string out with zeroes; if it is greater than the requested size, this will silently truncate the string.

Definition at line 263 of file datagram.I.

References append_data(), and pad_bytes().

Referenced by FltMaterial::build_14_record().

◆ add_float32()

void Datagram::add_float32 ( PN_float32  value)
inline

Adds a 32-bit single-precision floating-point number to the datagram.

Since this kind of float is not necessarily portable across different architectures, special care is required.

Definition at line 114 of file datagram.I.

References append_data(), and NativeNumericData::get_data().

Referenced by add_stdfloat(), PStatCollectorDef::write_datagram(), and PStatFrameData::write_datagram().

◆ add_float64()

void Datagram::add_float64 ( PN_float64  value)
inline

◆ add_int16()

void Datagram::add_int16 ( int16_t  value)
inline

Adds a signed 16-bit integer to the datagram.

Definition at line 58 of file datagram.I.

References append_data(), and NativeNumericData::get_data().

Referenced by PStatCollectorDef::write_datagram(), PaletteGroup::write_datagram(), TextureImage::write_datagram(), and SamplerState::write_datagram().

◆ add_int32()

void Datagram::add_int32 ( int32_t  value)
inline

◆ add_int64()

void Datagram::add_int64 ( int64_t  value)
inline

Adds a signed 64-bit integer to the datagram.

Definition at line 76 of file datagram.I.

References append_data(), and NativeNumericData::get_data().

◆ add_int8()

void Datagram::add_int8 ( int8_t  value)
inline

◆ add_stdfloat()

void Datagram::add_stdfloat ( PN_stdfloat  value)
inline

◆ add_string()

void Datagram::add_string ( const std::string &  str)
inline

◆ add_string32()

void Datagram::add_string32 ( const std::string &  str)
inline

Adds a variable-length string to the datagram, using a 32-bit length field to allow very long strings.

Definition at line 235 of file datagram.I.

References add_uint32(), and append_data().

◆ add_uint16()

void Datagram::add_uint16 ( uint16_t  value)
inline

Adds an unsigned 16-bit integer to the datagram.

Definition at line 85 of file datagram.I.

References append_data(), and NativeNumericData::get_data().

Referenced by add_wstring(), DatagramUDPHeader::DatagramUDPHeader(), PStatServerControlMessage::encode(), PStatClientControlMessage::encode(), TimedCycle::write_datagram(), GeomPatches::write_datagram(), AnimChannelBase::write_datagram(), DataNodeTransmit::write_datagram(), ButtonEventList::write_datagram(), PStatFrameData::write_datagram(), RecorderTable::write_datagram(), GeomVertexAnimationSpec::write_datagram(), OccluderEffect::write_datagram(), ComputeNode::Dispatcher::CData::write_datagram(), PartBundleNode::write_datagram(), ModelNode::write_datagram(), AnimPreloadTable::write_datagram(), LensNode::write_datagram(), AntialiasAttrib::write_datagram(), ScissorEffect::write_datagram(), OccluderNode::write_datagram(), CharacterJoint::write_datagram(), GeomVertexColumn::write_datagram(), CompassEffect::write_datagram(), TransformTable::write_datagram(), CollisionNode::write_datagram(), CollisionFloorMesh::write_datagram(), ButtonEvent::write_datagram(), TexProjectorEffect::write_datagram(), TexMatrixAttrib::write_datagram(), SliderTable::write_datagram(), BamCacheRecord::write_datagram(), TexGenAttrib::write_datagram(), PartGroup::write_datagram(), TransformBlend::write_datagram(), TransformBlendTable::write_datagram(), PortalNode::write_datagram(), ClipPlaneAttrib::write_datagram(), CollisionPolygon::write_datagram(), LightAttrib::write_datagram(), Character::write_datagram(), GeomVertexArrayFormat::write_datagram(), TextureAttrib::write_datagram(), and GeomVertexFormat::write_datagram().

◆ add_uint32()

void Datagram::add_uint32 ( uint32_t  value)
inline

◆ add_uint64()

void Datagram::add_uint64 ( uint64_t  value)
inline

Adds an unsigned 64-bit integer to the datagram.

Definition at line 103 of file datagram.I.

References append_data(), and NativeNumericData::get_data().

Referenced by ShaderBuffer::write_datagram(), and BamCacheRecord::write_datagram().

◆ add_uint8()

void Datagram::add_uint8 ( uint8_t  value)
inline

◆ add_wstring()

void Datagram::add_wstring ( const std::wstring &  str)

Adds a variable-length wstring to the datagram.

Definition at line 83 of file datagram.cxx.

References add_uint16(), and add_uint32().

◆ add_z_string()

void Datagram::add_z_string ( const std::string &  str)
inline

Adds a variable-length string to the datagram, as a NULL-terminated string.

Definition at line 247 of file datagram.I.

References add_uint8(), and append_data().

◆ append_data() [1/2]

void Datagram::append_data ( const void *  data,
size_t  size 
)

◆ append_data() [2/2]

void Datagram::append_data ( const vector_uchar &  data)
inline

Appends some more raw data to the end of the datagram.

Definition at line 306 of file datagram.I.

◆ assign()

void Datagram::assign ( const void *  data,
size_t  size 
)

Replaces the datagram's data with the indicated block.

Definition at line 159 of file datagram.cxx.

◆ clear()

void Datagram::clear ( )
virtual

Resets the datagram to empty, in preparation for building up a new datagram.

Reimplemented in NetDatagram.

Definition at line 35 of file datagram.cxx.

Referenced by NetDatagram::clear(), PStatServerControlMessage::encode(), and PStatClientControlMessage::encode().

◆ copy_array()

void Datagram::copy_array ( CPTA_uchar  data)
inline

Replaces the data in the Datagram with a copy of the data in the indicated CPTA_uchar.

Unlike set_array(), a complete copy is made of the data; subsequent changes to the Datagram will *not* change the source CPTA_uchar.

Definition at line 355 of file datagram.I.

◆ dump_hex()

void Datagram::dump_hex ( std::ostream &  out,
unsigned int  indent = 0 
) const

Writes a representation of the entire datagram contents, as a sequence of hex (and ASCII) values.

Definition at line 44 of file datagram.cxx.

References get_data(), get_length(), and indent().

Referenced by DatagramUDPHeader::verify_datagram(), DirectD::wait_for_servers(), and write().

◆ get_array()

CPTA_uchar Datagram::get_array ( ) const
inline

Returns a const pointer to the actual data in the Datagram.

Definition at line 364 of file datagram.I.

◆ get_data()

const void * Datagram::get_data ( ) const
inline

◆ get_length()

size_t Datagram::get_length ( ) const
inline

◆ get_message()

std::string Datagram::get_message ( ) const
inline

Returns the datagram's data as a string.

Definition at line 314 of file datagram.I.

Referenced by DatagramUDPHeader::get_header(), and DatagramTCPHeader::get_header().

◆ get_stdfloat_double()

bool Datagram::get_stdfloat_double ( ) const
inline

Returns the stdfloat_double flag.

See set_stdfloat_double().

Definition at line 403 of file datagram.I.

◆ modify_array()

PTA_uchar Datagram::modify_array ( )
inline

Returns a modifiable pointer to the actual data in the Datagram.

Definition at line 372 of file datagram.I.

◆ output()

void Datagram::output ( std::ostream &  out) const

Write a string representation of this instance to <out>.

Definition at line 171 of file datagram.cxx.

◆ pad_bytes()

void Datagram::pad_bytes ( size_t  size)

Adds the indicated number of zero bytes to the datagram.

Definition at line 99 of file datagram.cxx.

Referenced by add_fixed_string(), and FltMaterial::build_14_record().

◆ set_array()

void Datagram::set_array ( PTA_uchar  data)
inline

Replaces the data in the Datagram with the data in the indicated PTA_uchar.

This is assignment by reference: subsequent changes to the Datagram will also change the source PTA_uchar.

Definition at line 345 of file datagram.I.

◆ set_stdfloat_double()

void Datagram::set_stdfloat_double ( bool  stdfloat_double)
inline

Changes the stdfloat_double flag, which defines the operation performed by add_stdfloat() and DatagramIterator::get_stdfloat().

When this is true, add_stdfloat() adds a 64-bit floating-point number; when it is false, it adds a 32-bit floating-point number. The default is based on the STDFLOAT_DOUBLE compilation flag.

Definition at line 395 of file datagram.I.

◆ write()

void Datagram::write ( std::ostream &  out,
unsigned int  indent = 0 
) const

Write a string representation of this instance to <out>.

Definition at line 181 of file datagram.cxx.

References dump_hex(), and indent().

Referenced by DatagramIterator::write().


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