]> git.cworth.org Git - apitrace/blobdiff - common/trace_callset.hpp
Rename trim::CallSet to trace::FastCallSet
[apitrace] / common / trace_callset.hpp
index b679d94867b3f095f78b574e07c4075deccafc7e..a2f82134c558972eca41c090d660f4470a8105f1 100644 (file)
@@ -48,6 +48,7 @@
 #define _TRACE_CALLSET_HPP_
 
 
+#include <limits>
 #include <list>
 
 #include "trace_model.hpp"
 
 namespace trace {
 
-
-    // Should match Call::no
-    typedef unsigned CallNo;
-
-
     // Aliases for call flags
     enum {
         FREQUENCY_NONE         = 0,
@@ -106,12 +102,15 @@ namespace trace {
     // 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);
 
@@ -128,6 +127,16 @@ namespace trace {
             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;
@@ -155,6 +164,14 @@ namespace trace {
         contains(const trace::Call &call) {
             return contains(call.no, call.flags);
         }
+
+        CallNo getFirst() {
+            return limits.start;
+        }
+
+        CallNo getLast() {
+            return limits.stop;
+        }
     };