14#ifndef DCPACKERINTERFACE_H
15#define DCPACKERINTERFACE_H
67class EXPCL_DIRECT_DCPARSER DCPackerInterface {
69 DCPackerInterface(
const std::string &name = std::string());
70 DCPackerInterface(
const DCPackerInterface ©);
71 virtual ~DCPackerInterface();
74 INLINE
const std::string &
get_name()
const;
78 virtual const DCField *as_field()
const;
84 INLINE
bool check_match(
const DCPackerInterface *other)
const;
88 virtual void set_name(
const std::string &name);
105 bool &pack_error,
bool &range_error)
const;
107 bool &pack_error,
bool &range_error)
const;
109 bool &pack_error,
bool &range_error)
const;
111 bool &pack_error,
bool &range_error)
const;
113 bool &pack_error,
bool &range_error)
const;
115 bool &pack_error,
bool &range_error)
const;
117 bool &pack_error,
bool &range_error)
const;
120 virtual void unpack_double(
const char *data,
size_t length,
size_t &p,
121 double &value,
bool &pack_error,
bool &range_error)
const;
122 virtual void unpack_int(
const char *data,
size_t length,
size_t &p,
123 int &value,
bool &pack_error,
bool &range_error)
const;
124 virtual void unpack_uint(
const char *data,
size_t length,
size_t &p,
125 unsigned int &value,
bool &pack_error,
bool &range_error)
const;
126 virtual void unpack_int64(
const char *data,
size_t length,
size_t &p,
127 int64_t &value,
bool &pack_error,
bool &range_error)
const;
128 virtual void unpack_uint64(
const char *data,
size_t length,
size_t &p,
129 uint64_t &value,
bool &pack_error,
bool &range_error)
const;
130 virtual void unpack_string(
const char *data,
size_t length,
size_t &p,
131 std::string &value,
bool &pack_error,
bool &range_error)
const;
132 virtual void unpack_blob(
const char *data,
size_t length,
size_t &p,
133 vector_uchar &value,
bool &pack_error,
bool &range_error)
const;
134 virtual bool unpack_validate(
const char *data,
size_t length,
size_t &p,
135 bool &pack_error,
bool &range_error)
const;
136 virtual bool unpack_skip(
const char *data,
size_t length,
size_t &p,
137 bool &pack_error)
const;
142 INLINE
static void do_pack_int8(
char *buffer,
int value);
143 INLINE
static void do_pack_int16(
char *buffer,
int value);
144 INLINE
static void do_pack_int32(
char *buffer,
int value);
145 INLINE
static void do_pack_int64(
char *buffer, int64_t value);
146 INLINE
static void do_pack_uint8(
char *buffer,
unsigned int value);
147 INLINE
static void do_pack_uint16(
char *buffer,
unsigned int value);
148 INLINE
static void do_pack_uint32(
char *buffer,
unsigned int value);
149 INLINE
static void do_pack_uint64(
char *buffer, uint64_t value);
150 INLINE
static void do_pack_float64(
char *buffer,
double value);
152 INLINE
static int do_unpack_int8(
const char *buffer);
153 INLINE
static int do_unpack_int16(
const char *buffer);
154 INLINE
static int do_unpack_int32(
const char *buffer);
155 INLINE
static int64_t do_unpack_int64(
const char *buffer);
156 INLINE
static unsigned int do_unpack_uint8(
const char *buffer);
157 INLINE
static unsigned int do_unpack_uint16(
const char *buffer);
158 INLINE
static unsigned int do_unpack_uint32(
const char *buffer);
159 INLINE
static uint64_t do_unpack_uint64(
const char *buffer);
160 INLINE
static double do_unpack_float64(
const char *buffer);
174 virtual bool do_check_match(
const DCPackerInterface *other)
const=0;
192 bool _has_fixed_byte_size;
193 size_t _fixed_byte_size;
194 bool _has_fixed_structure;
195 bool _has_range_limits;
196 size_t _num_length_bytes;
197 bool _has_nested_fields;
198 int _num_nested_fields;
199 DCPackType _pack_type;
This represents an array of some other kind of object, meaning this parameter type accepts an arbitra...
A single atomic field of a Distributed Class, as read from a .dc file.
This represents a class (or struct) object used as a parameter itself.
A single field of a Distributed Class, either atomic or molecular.
Represents the complete list of Distributed Class descriptions as read from a .dc file.
A single molecular field of a Distributed Class, as read from a .dc file.
This is a block of data that receives the results of DCPacker.
This object contains the names of all of the nested fields available within a particular field.
static void validate_uint_limits(unsigned int value, int num_bits, bool &range_error)
Confirms that the unsigned value fits within num_bits bits.
bool has_fixed_structure() const
Returns true if this field type always has the same structure regardless of the data in the stream,...
const DCPackerCatalog * get_catalog() const
Returns the DCPackerCatalog associated with this field, listing all of the nested fields by name.
const std::string & get_name() const
Returns the name of this field, or empty string if the field is unnamed.
virtual void pack_int64(DCPackData &pack_data, int64_t value, bool &pack_error, bool &range_error) const
Packs the indicated numeric or string value into the stream.
virtual void unpack_blob(const char *data, size_t length, size_t &p, std::vector< unsigned char > &value, bool &pack_error, bool &range_error) const
Unpacks the current numeric or string value from the stream.
bool has_nested_fields() const
Returns true if this field type has any nested fields (and thus expects a push() .
size_t get_fixed_byte_size() const
If has_fixed_byte_size() returns true, this returns the number of bytes this field type will use.
int get_num_nested_fields() const
Returns the number of nested fields required by this field type.
virtual void pack_uint(DCPackData &pack_data, unsigned int value, bool &pack_error, bool &range_error) const
Packs the indicated numeric or string value into the stream.
virtual void unpack_uint64(const char *data, size_t length, size_t &p, uint64_t &value, bool &pack_error, bool &range_error) const
Unpacks the current numeric or string value from the stream.
virtual void unpack_double(const char *data, size_t length, size_t &p, double &value, bool &pack_error, bool &range_error) const
Unpacks the current numeric or string value from the stream.
virtual void pack_uint64(DCPackData &pack_data, uint64_t value, bool &pack_error, bool &range_error) const
Packs the indicated numeric or string value into the stream.
virtual bool unpack_validate(const char *data, size_t length, size_t &p, bool &pack_error, bool &range_error) const
Internally unpacks the current numeric or string value and validates it against the type range limits...
bool has_fixed_byte_size() const
Returns true if this field type always packs to the same number of bytes, false if it is variable.
virtual int calc_num_nested_fields(size_t length_bytes) const
This flavor of get_num_nested_fields is used during unpacking.
virtual bool do_check_match_simple_parameter(const DCSimpleParameter *other) const
Returns true if this field matches the indicated simple parameter, false otherwise.
virtual void unpack_uint(const char *data, size_t length, size_t &p, unsigned int &value, bool &pack_error, bool &range_error) const
Unpacks the current numeric or string value from the stream.
virtual void pack_string(DCPackData &pack_data, const std::string &value, bool &pack_error, bool &range_error) const
Packs the indicated numeric or string value into the stream.
size_t get_num_length_bytes() const
Returns the number of bytes that should be written into the stream on a push() to record the number o...
virtual void unpack_string(const char *data, size_t length, size_t &p, std::string &value, bool &pack_error, bool &range_error) const
Unpacks the current numeric or string value from the stream.
static void validate_int_limits(int value, int num_bits, bool &range_error)
Confirms that the signed value fits within num_bits bits.
static void validate_uint64_limits(uint64_t value, int num_bits, bool &range_error)
Confirms that the unsigned value fits within num_bits bits.
virtual void unpack_int(const char *data, size_t length, size_t &p, int &value, bool &pack_error, bool &range_error) const
Unpacks the current numeric or string value from the stream.
static void validate_int64_limits(int64_t value, int num_bits, bool &range_error)
Confirms that the signed value fits within num_bits bits.
virtual bool do_check_match_atomic_field(const DCAtomicField *other) const
Returns true if this field matches the indicated atomic field, false otherwise.
virtual void pack_int(DCPackData &pack_data, int value, bool &pack_error, bool &range_error) const
Packs the indicated numeric or string value into the stream.
virtual bool validate_num_nested_fields(int num_nested_fields) const
After a number of fields have been packed via push() .
bool check_match(const DCPackerInterface *other) const
Returns true if the other interface is bitwise the same as this oneāthat is, a uint32 only matches a ...
virtual bool do_check_match_switch_parameter(const DCSwitchParameter *other) const
Returns true if this field matches the indicated switch parameter, false otherwise.
virtual void pack_double(DCPackData &pack_data, double value, bool &pack_error, bool &range_error) const
Packs the indicated numeric or string value into the stream.
virtual void unpack_int64(const char *data, size_t length, size_t &p, int64_t &value, bool &pack_error, bool &range_error) const
Unpacks the current numeric or string value from the stream.
bool has_range_limits() const
Returns true if this field, or any sub-field of this field, has a limit imposed in the DC file on its...
virtual DCPackerInterface * get_nested_field(int n) const
Returns the DCPackerInterface object that represents the nth nested field.
virtual bool do_check_match_class_parameter(const DCClassParameter *other) const
Returns true if this field matches the indicated class parameter, false otherwise.
virtual void set_name(const std::string &name)
Sets the name of this field.
DCPackType get_pack_type() const
Returns the type of value expected by this field.
virtual bool do_check_match_molecular_field(const DCMolecularField *other) const
Returns true if this field matches the indicated molecular field, false otherwise.
virtual bool do_check_match_array_parameter(const DCArrayParameter *other) const
Returns true if this field matches the indicated array parameter, false otherwise.
virtual void pack_blob(DCPackData &pack_data, const std::vector< unsigned char > &value, bool &pack_error, bool &range_error) const
Packs the indicated numeric or string value into the stream.
virtual bool unpack_skip(const char *data, size_t length, size_t &p, bool &pack_error) const
Increments p to the end of the current field without actually unpacking any data or performing any ra...
virtual bool pack_default_value(DCPackData &pack_data, bool &pack_error) const
Packs the field's specified default value (or a sensible default if no value is specified) into the s...
int find_seek_index(const std::string &name) const
Returns the index number to be passed to a future call to DCPacker::seek() to seek directly to the na...
This is the most fundamental kind of parameter type: a single number or string, one of the DCSubatomi...
This represents a switch object used as a parameter itself, which packs the appropriate fields of the...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.