historical/toontown-classic.git/panda/include/pStatFrameData.I
2024-01-16 11:20:27 -06:00

206 lines
4.5 KiB
Text

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file pStatFrameData.I
* @author drose
* @date 2000-07-10
*/
/**
* Returns true if there are no time events in the frame data, false
* otherwise.
*/
INLINE bool PStatFrameData::
is_time_empty() const {
return _time_data.empty();
}
/**
* Returns true if there are no levels indicated in the frame data, false
* otherwise.
*/
INLINE bool PStatFrameData::
is_level_empty() const {
return _level_data.empty();
}
/**
* Returns true if the FrameData has no time or level data.
*/
INLINE bool PStatFrameData::
is_empty() const {
return is_time_empty() && is_level_empty();
}
/**
* Removes all the data points from the frame data, in preparation for
* building up a new frame's worth.
*/
INLINE void PStatFrameData::
clear() {
_time_data.clear();
_level_data.clear();
}
/**
* Exchanges the data in this object with the data in the other.
*/
INLINE void PStatFrameData::
swap(PStatFrameData &other) {
_time_data.swap(other._time_data);
_level_data.swap(other._level_data);
}
/**
* Adds a 'start collector' data point to the frame data.
*/
INLINE void PStatFrameData::
add_start(int index, double time) {
#ifdef _DEBUG
nassertv((index & 0x7fff) == index);
#endif
DataPoint dp;
dp._index = index;
dp._value = time;
_time_data.push_back(dp);
}
/**
* Adds a 'stop collector' data point to the frame data.
*/
INLINE void PStatFrameData::
add_stop(int index, double time) {
#ifdef _DEBUG
nassertv((index & 0x7fff) == index);
#endif
DataPoint dp;
dp._index = index | 0x8000;
dp._value = time;
_time_data.push_back(dp);
}
/**
* Adds a particular level value associated with a given collector to the
* frame data.
*/
INLINE void PStatFrameData::
add_level(int index, double level) {
#ifdef _DEBUG
nassertv((index & 0xffff) == index);
#endif
DataPoint dp;
dp._index = index;
dp._value = level;
_level_data.push_back(dp);
}
/**
* Returns the time of the first data point in the frame data. This will
* generally be the time of the start of the frame.
*/
INLINE double PStatFrameData::
get_start() const {
if (is_empty()) {
return 0.0;
}
return _time_data.front()._value;
}
/**
* Returns the time of the last data point in the frame data. This will
* generally be the time of the end of the frame.
*/
INLINE double PStatFrameData::
get_end() const {
nassertr(!is_empty(), 0.0);
return _time_data.back()._value;
}
/**
* Returns the total time elapsed for the frame.
*/
INLINE double PStatFrameData::
get_net_time() const {
nassertr(!is_empty(), 0.0);
return _time_data.back()._value - _time_data.front()._value;
}
/**
* Returns the number of individual events stored in the FrameData.
*/
INLINE size_t PStatFrameData::
get_num_events() const {
return _time_data.size();
}
/**
* Returns the index of the collector associated with the nth event.
*/
INLINE int PStatFrameData::
get_time_collector(size_t n) const {
nassertr(n < _time_data.size(), 0);
return _time_data[n]._index & 0x7fff;
}
/**
* Returns true if the nth event represents a start event, or false if it
* represents a stop event.
*/
INLINE bool PStatFrameData::
is_start(size_t n) const {
nassertr(n < _time_data.size(), 0);
return (_time_data[n]._index & 0x8000) == 0;
}
/**
* Returns the timestamp of the nth event, in seconds elapsed since some
* undefined epoch (which is guaranteed to be shared among all events returned
* from a given client).
*/
INLINE double PStatFrameData::
get_time(size_t n) const {
nassertr(n < _time_data.size(), 0);
return _time_data[n]._value;
}
/**
* Returns the number of individual level values stored in the FrameData.
*/
INLINE size_t PStatFrameData::
get_num_levels() const {
return _level_data.size();
}
/**
* Returns the index of the collector associated with the nth level value.
*/
INLINE int PStatFrameData::
get_level_collector(size_t n) const {
nassertr(n < _level_data.size(), 0);
return _level_data[n]._index;
}
/**
* Returns the height of the nth level value.
*/
INLINE double PStatFrameData::
get_level(size_t n) const {
nassertr(n < _level_data.size(), 0);
return _level_data[n]._value;
}
/**
* Orders the data points by time.
*/
INLINE bool PStatFrameData::DataPoint::
operator < (const PStatFrameData::DataPoint &other) const {
return _value < other._value;
}