#include <assert.h>
#include <boost/icl/interval.hpp>
+#include <boost/icl/interval_set.hpp>
#include <boost/icl/interval_map.hpp>
using namespace std;
iter++;
}
}
+
+extern "C" void
+find_range (void *mapv, uint64_t start, uint64_t end, void (*f) (uint64_t start, uint64_t end, const char *object, void *opaque), void *opaque)
+{
+ ranges *map = (ranges *) mapv;
+
+ boost::icl::interval<uint64_t>::type window;
+ window = boost::icl::interval<uint64_t>::right_open (start, end);
+
+ ranges r = *map & window;
+
+ ranges::iterator iter = r.begin ();
+ while (iter != r.end ()) {
+ boost::icl::interval<uint64_t>::type range = iter->first;
+ uint64_t start = range.lower ();
+ uint64_t end = range.upper ();
+
+ objects obj_set = iter->second;
+ objects::iterator iter2 = obj_set.begin ();
+ while (iter2 != obj_set.end ()) {
+ f (start, end, iter2->c_str (), opaque);
+ iter2++;
+ }
+ iter++;
+ }
+}