#include <stdlib.h>
#include <iostream>
#include <vector>
#include <utility>
#include "bm.h"
#include "bmalgo.h"
#include "bmundef.h"
using namespace std;
typedef bm::bvector<>::size_type bv_size_type;
typedef std::vector<std::pair<bv_size_type, bv_size_type> > bv_ranges_vector;
int main(void)
{
try
{
const unsigned ranges = 3; bm::bvector<> bv { 10, 20, 100, 200, 300, 655000, bm::id_max-1 };
bv_size_type cnt = bv.count();
bv_size_type split_rank = cnt / ranges;
bv_ranges_vector pair_vect;
cout << "Target split rank:" << split_rank << endl;
bm::rank_range_split(bv, split_rank, pair_vect);
for (size_t k = 0; k < pair_vect.size(); ++k)
{
const auto& p = pair_vect[k];
cout << k << ": [" << p.first << ".." << p.second << "] ";
bm::bvector<>::enumerator en = bv.get_enumerator(p.first);
for (; en.valid(); ++en)
{
auto v = *en;
if (v > p.second)
break;
cout << v << ", ";
} cout << endl;
}
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}