14 #ifndef DCPACKERINTERFACE_H 15 #define DCPACKERINTERFACE_H 75 INLINE
const std::string &get_name()
const;
76 int find_seek_index(
const std::string &name)
const;
79 virtual const DCField *as_field()
const;
86 bool check_match(
const std::string &description,
DCFile *dcfile =
nullptr)
const;
89 virtual void set_name(
const std::string &name);
90 INLINE
bool has_fixed_byte_size()
const;
91 INLINE
size_t get_fixed_byte_size()
const;
92 INLINE
bool has_fixed_structure()
const;
93 INLINE
bool has_range_limits()
const;
94 INLINE
size_t get_num_length_bytes()
const;
96 INLINE
bool has_nested_fields()
const;
97 INLINE
int get_num_nested_fields()
const;
98 virtual int calc_num_nested_fields(
size_t length_bytes)
const;
101 virtual bool validate_num_nested_fields(
int num_nested_fields)
const;
103 INLINE DCPackType get_pack_type()
const;
105 virtual void pack_double(
DCPackData &pack_data,
double value,
106 bool &pack_error,
bool &range_error)
const;
107 virtual void pack_int(
DCPackData &pack_data,
int value,
108 bool &pack_error,
bool &range_error)
const;
109 virtual void pack_uint(
DCPackData &pack_data,
unsigned int value,
110 bool &pack_error,
bool &range_error)
const;
111 virtual void pack_int64(
DCPackData &pack_data, int64_t value,
112 bool &pack_error,
bool &range_error)
const;
113 virtual void pack_uint64(
DCPackData &pack_data, uint64_t value,
114 bool &pack_error,
bool &range_error)
const;
115 virtual void pack_string(
DCPackData &pack_data,
const std::string &value,
116 bool &pack_error,
bool &range_error)
const;
117 virtual void pack_blob(
DCPackData &pack_data,
const vector_uchar &value,
118 bool &pack_error,
bool &range_error)
const;
119 virtual bool pack_default_value(
DCPackData &pack_data,
bool &pack_error)
const;
121 virtual void unpack_double(
const char *data,
size_t length,
size_t &p,
122 double &value,
bool &pack_error,
bool &range_error)
const;
123 virtual void unpack_int(
const char *data,
size_t length,
size_t &p,
124 int &value,
bool &pack_error,
bool &range_error)
const;
125 virtual void unpack_uint(
const char *data,
size_t length,
size_t &p,
126 unsigned int &value,
bool &pack_error,
bool &range_error)
const;
127 virtual void unpack_int64(
const char *data,
size_t length,
size_t &p,
128 int64_t &value,
bool &pack_error,
bool &range_error)
const;
129 virtual void unpack_uint64(
const char *data,
size_t length,
size_t &p,
130 uint64_t &value,
bool &pack_error,
bool &range_error)
const;
131 virtual void unpack_string(
const char *data,
size_t length,
size_t &p,
132 std::string &value,
bool &pack_error,
bool &range_error)
const;
133 virtual void unpack_blob(
const char *data,
size_t length,
size_t &p,
134 vector_uchar &value,
bool &pack_error,
bool &range_error)
const;
135 virtual bool unpack_validate(
const char *data,
size_t length,
size_t &p,
136 bool &pack_error,
bool &range_error)
const;
137 virtual bool unpack_skip(
const char *data,
size_t length,
size_t &p,
138 bool &pack_error)
const;
143 INLINE
static void do_pack_int8(
char *buffer,
int value);
144 INLINE
static void do_pack_int16(
char *buffer,
int value);
145 INLINE
static void do_pack_int32(
char *buffer,
int value);
146 INLINE
static void do_pack_int64(
char *buffer, int64_t value);
147 INLINE
static void do_pack_uint8(
char *buffer,
unsigned int value);
148 INLINE
static void do_pack_uint16(
char *buffer,
unsigned int value);
149 INLINE
static void do_pack_uint32(
char *buffer,
unsigned int value);
150 INLINE
static void do_pack_uint64(
char *buffer, uint64_t value);
151 INLINE
static void do_pack_float64(
char *buffer,
double value);
153 INLINE
static int do_unpack_int8(
const char *buffer);
154 INLINE
static int do_unpack_int16(
const char *buffer);
155 INLINE
static int do_unpack_int32(
const char *buffer);
156 INLINE
static int64_t do_unpack_int64(
const char *buffer);
157 INLINE
static unsigned int do_unpack_uint8(
const char *buffer);
158 INLINE
static unsigned int do_unpack_uint16(
const char *buffer);
159 INLINE
static unsigned int do_unpack_uint32(
const char *buffer);
160 INLINE
static uint64_t do_unpack_uint64(
const char *buffer);
161 INLINE
static double do_unpack_float64(
const char *buffer);
163 INLINE
static void validate_int_limits(
int value,
int num_bits,
165 INLINE
static void validate_int64_limits(int64_t value,
int num_bits,
167 INLINE
static void validate_uint_limits(
unsigned int value,
int num_bits,
169 INLINE
static void validate_uint64_limits(uint64_t value,
int num_bits,
181 virtual bool do_check_match_simple_parameter(
const DCSimpleParameter *other)
const;
182 virtual bool do_check_match_class_parameter(
const DCClassParameter *other)
const;
183 virtual bool do_check_match_switch_parameter(
const DCSwitchParameter *other)
const;
184 virtual bool do_check_match_array_parameter(
const DCArrayParameter *other)
const;
185 virtual bool do_check_match_atomic_field(
const DCAtomicField *other)
const;
186 virtual bool do_check_match_molecular_field(
const DCMolecularField *other)
const;
193 bool _has_fixed_byte_size;
194 size_t _fixed_byte_size;
195 bool _has_fixed_structure;
196 bool _has_range_limits;
197 size_t _num_length_bytes;
198 bool _has_nested_fields;
199 int _num_nested_fields;
200 DCPackType _pack_type;
This is a block of data that receives the results of DCPacker.
This represents a class (or struct) object used as a parameter itself.
A single field of a Distributed Class, either atomic or molecular.
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...
A single atomic field of a Distributed Class, as read from a .dc file.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Represents the complete list of Distributed Class descriptions as read from a .dc file.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This represents an array of some other kind of object, meaning this parameter type accepts an arbitra...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This object contains the names of all of the nested fields available within a particular field.
A single molecular field of a Distributed Class, as read from a .dc file.
This defines the internal interface for packing values into a DCField.