28 std::stable_sort(_time_data.begin(), _time_data.end());
37 if (_time_data.size() >= 65536 || _level_data.size() >= 65536) {
39 <<
"Dropping frame with " << _time_data.size()
40 <<
" time measurements and " << _level_data.size()
41 <<
" level measurements.\n";
45#if !defined(WORDS_BIGENDIAN) || defined(__GNUC__)
47 size_t size = (_time_data.size() + _level_data.size()) * 6 + 4;
49 size_t offset = array.size();
50 array.resize(offset + size);
51 unsigned char *data = &array[0] + offset;
53 uint16_t *ptr = (uint16_t *)data;
56 *ptr++ = __builtin_bswap16(_time_data.size());
58 for (
const DataPoint &dp : _time_data) {
59 *ptr++ = __builtin_bswap16(dp._index);
60 PN_float32 v = (PN_float32)dp._value;
61 *(uint32_t *)ptr = __builtin_bswap32(
reinterpret_cast<uint32_t &
>(v));
65 *ptr++ = __builtin_bswap16(_level_data.size());
66 for (
const DataPoint &dp : _level_data) {
67 *ptr++ = __builtin_bswap16(dp._index);
68 PN_float32 v = (PN_float32)dp._value;
69 *(uint32_t *)ptr = __builtin_bswap32(
reinterpret_cast<uint32_t &
>(v));
73 *ptr++ = _time_data.size();
75 for (
const DataPoint &dp : _time_data) {
77 *(PN_float32 *)ptr = dp._value;
81 *ptr++ = _level_data.size();
82 for (
const DataPoint &dp : _level_data) {
84 *(PN_float32 *)ptr = dp._value;
91 for (
const DataPoint &dp : _time_data) {
96 for (
const DataPoint &dp : _level_data) {
119 _time_data.resize(time_size);
120 for (DataPoint &dp : _time_data) {
134 _level_data.resize(level_size);
135 for (DataPoint &dp : _level_data) {
A class to retrieve the individual data elements previously stored in a Datagram.
PN_float32 get_float32()
Extracts a 32-bit single-precision floating-point number.
uint16_t get_uint16()
Extracts an unsigned 16-bit integer.
uint32_t get_uint32()
Extracts an unsigned 32-bit integer.
size_t get_remaining_size() const
Return the bytes left in the datagram.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
void add_float32(PN_float32 value)
Adds a 32-bit single-precision floating-point number to the datagram.
PTA_uchar modify_array()
Returns a modifiable pointer to the actual data in the Datagram.
void add_uint16(uint16_t value)
Adds an unsigned 16-bit integer to the datagram.
Records the version number of a particular client.
bool is_at_least(int major_version, int minor_version) const
Returns true if the client version is at least the indicated major/minor version number,...
Manages the communications to report statistics via a network connection to a remote PStatServer.
void sort_time()
Ensures the frame data is in monotonically increasing order by time.
void read_datagram(DatagramIterator &source, PStatClientVersion *version)
Extracts the FrameData definition from the datagram.
bool write_datagram(Datagram &destination, PStatClient *client) const
Writes the definition of the FrameData to the datagram.
void clear()
Removes all the data points from the frame data, in preparation for building up a new frame's worth.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.