Example for finding first and last bits in bit-vector (dynamic range).Ranges of bit-vectors can be used to find probability of intersection. For instance, in some corner cases AND product can be predicted empty if vectors belong to different ranges.
@sa bm::aggregator
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <memory>
{
if (first == last)
std::cout << "<EMPTY SET>";
else
for (; first != last; ++first)
std::cout << *first << ";";
std::cout << std::endl;
}
{
try
{
{
std::cerr << "Too many bit-vectors!" << std::endl;
return 1;
}
std::cout << "AGRUMENT (GROUP 0) SETS:" << std::endl;
std::vector<std::unique_ptr<bm::bvector<> > > vect;
{
bv->set(i);
bv->set(i+1);
bv->set(10000);
bv->set(20000);
bv->optimize();
vect.push_back(std::move(bv));
}
std::cout << std::endl;
try
{
for (unsigned i = 0; i < vect.size(); ++i)
{
}
std::cout << "OR:" << std::endl;
std::cout << "AND:" << std::endl;
for (unsigned i = 0; i < vect.size(); ++i)
{
const unsigned group0 = 0;
agg.
add(vect[i].get(), group0);
}
std::cout << "AND-SUB(empty):" << std::endl;
std::cout << "AND-SUB:" << std::endl;
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
throw;
}
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}