Example of how to use various bit setting techniques.Several techniques benchmarked to better illustrate relative performance.
#include <iostream>
#include <vector>
#define BM64ADDR
{
if (first == last)
std::cout << "<EMPTY SET>";
else
for (; first != last; ++first)
std::cout << *first << ";";
std::cout << std::endl;
}
static
std::vector<bm_size_type> &v2,
std::vector<bm_size_type> &v3)
{
{
v1.push_back(j);
}
{
v2.push_back(j);
}
{
v3.push_back(j);
}
}
static
{
{
{
}
{
}
{
}
}
}
static
{
{
{
}
{
}
{
}
}
}
static
std::vector<bm_size_type> &v2,
std::vector<bm_size_type> &v3)
{
{
}
}
static
std::vector<bm_size_type> &v2,
std::vector<bm_size_type> &v3)
{
{
}
}
{
try
{
bv1.clear();
bv1.set(10);
bv1.set(256);
bv1.set(1000000);
unsigned cnt = 0;
for (unsigned i = 0; i < sizeof(bits) / sizeof(bits[0]); ++i)
{
bool b = bv1.set_bit(bits[i], true);
cnt += b;
}
std::cout << "Number of bits changed:" << cnt << std::endl;
bool b;
b = bv1.set_bit_conditional(5, true, false);
std::cout << "Bit 5 set:" << (b ? " yes " : " no ") << std::endl;
b = bv1.set_bit_conditional(256, true, false);
std::cout << "Bit 256 set:" << (b ? " yes " : " no ") << std::endl;
b = bv1.set_bit_conditional(256, true, true);
std::cout << "Bit 256 set:" << (b ? " yes " : " no ") << std::endl;
bv1.set_range(10, 15, true);
bv1.set_range(10, 12, false);
b = bv1.clear_bit(13);
std::cout << "Bit 13 set:" << (b ? " yes " : " no ") << std::endl;
bv1.reset();
bm::combine_or(bv1, &bits[0], &bits[0] + (
sizeof(bits) /
sizeof(bits[0])));
bv1.flip(256);
bv1.flip(257);
for (p = bv2.extract_next(p); p != 0; p = bv2.extract_next(p))
{
std::cout << "Extracted p = " << p << std::endl;
}
bv3.set_bit_no_check(10);
bv3.set_bit_no_check(100);
bv3.set_bit_no_check(1000);
std::vector<bm_size_type> v1, v2, v3;
for (unsigned k = 0; k < 1000; ++k)
{
for (i = 0; i < v1.size(); ++i)
s = s + s* v1[i] + i;
for (i = 0; i < v2.size(); ++i)
s = s + s* v2[i] + i;
std::cout << s << "\r";
}
std::cout << std::endl << "Running benchmarks..." << std::endl;
std::cout << std::endl;
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}