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 Datagram &copy)=default
 
 Datagram (const void *data, size_t size)
 Constructs a datagram from an existing block of data. More...
 
 Datagram (Datagram &&from) noexcept=default
 
 Datagram (vector_uchar data)
 Constructs a datagram from an existing block of data. More...
 
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 vector_uchar &data)
 Appends some more raw data to the end of the datagram. More...
 
void append_data (const void *data, size_t size)
 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
 
- Public Member Functions inherited from MemoryBase
void operator delete (void *, void *)
 
void operator delete (void *ptr)
 
void operator delete[] (void *, void *)
 
void operator delete[] (void *ptr)
 
void * operator new (size_t size)
 
void * operator new (size_t size, void *ptr)
 
void * operator new[] (size_t size)
 
void * operator new[] (size_t size, void *ptr)
 

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 17 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 25 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 199 of file datagram.I.

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 208 of file datagram.I.

◆ 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 144 of file datagram.I.

◆ 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 153 of file datagram.I.

◆ 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 162 of file datagram.I.

◆ 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 171 of file datagram.I.

◆ 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 180 of file datagram.I.

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 189 of file datagram.I.

◆ 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 277 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 293 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 262 of file datagram.I.

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 113 of file datagram.I.

Referenced by 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 57 of file datagram.I.

Referenced by PaletteGroup::write_datagram(), TextureImage::write_datagram(), SamplerState::write_datagram(), and PStatCollectorDef::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 75 of file datagram.I.

◆ 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 234 of file datagram.I.

◆ add_uint16()

void Datagram::add_uint16 ( uint16_t  value)
inline

Adds an unsigned 16-bit integer to the datagram.

Definition at line 84 of file datagram.I.

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

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 82 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 246 of file datagram.I.

◆ append_data() [1/2]

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

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

Definition at line 305 of file datagram.I.

◆ append_data() [2/2]

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

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

Definition at line 128 of file datagram.cxx.

Referenced by ShaderBuffer::write_datagram().

◆ assign()

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

Replaces the datagram's data with the indicated block.

Definition at line 158 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 34 of file datagram.cxx.

Referenced by NetDatagram::clear(), PStatClientControlMessage::encode(), and PStatServerControlMessage::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 354 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 43 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 363 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 313 of file datagram.I.

◆ get_stdfloat_double()

bool Datagram::get_stdfloat_double ( ) const
inline

Returns the stdfloat_double flag.

See set_stdfloat_double().

Definition at line 402 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 371 of file datagram.I.

◆ output()

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

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

Definition at line 170 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 98 of file datagram.cxx.

Referenced by 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 344 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 394 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 180 of file datagram.cxx.

References dump_hex(), and indent().

Referenced by DatagramIterator::write().


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