#define _TRACE_CALLSET_HPP_
+#include <limits>
#include <list>
#include "trace_model.hpp"
// A collection of call ranges
class CallSet
{
+ private:
+ CallRange limits;
+
public:
// TODO: use binary tree to speed up lookups
typedef std::list< CallRange > RangeList;
RangeList ranges;
- CallSet() {}
+ CallSet(): limits(std::numeric_limits<CallNo>::min(), std::numeric_limits<CallNo>::max()) {}
CallSet(CallFlags freq);
if (range.start <= range.stop &&
range.freq != FREQUENCY_NONE) {
+ if (empty()) {
+ limits.start = range.start;
+ limits.stop = range.stop;
+ } else {
+ if (range.start < limits.start)
+ limits.start = range.start;
+ if (range.stop > limits.stop)
+ limits.stop = range.stop;
+ }
+
RangeList::iterator it = ranges.begin();
while (it != ranges.end() && it->start < range.start) {
++it;
contains(const trace::Call &call) {
return contains(call.no, call.flags);
}
+
+ CallNo getFirst() {
+ return limits.start;
+ }
+
+ CallNo getLast() {
+ return limits.stop;
+ }
};