Example of how to use various bit setting techniques.Several techniques benchmarked to better illustrate relative performance.
#include <iostream>
#include <vector>
#define BM64ADDR
using namespace std;
{
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
{
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;
std::cout << "Bit 5 set:" << (b ? " yes " : " no ") << std::endl;
std::cout << "Bit 256 set:" << (b ? " yes " : " no ") << std::endl;
std::cout << "Bit 256 set:" << (b ? " yes " : " no ") << std::endl;
std::cout << "Bit 13 set:" << (b ? " yes " : " no ") << std::endl;
bm::combine_or(bv1, &bits[0], &bits[0] + (
sizeof(bits) /
sizeof(bits[0])));
{
std::cout << "Extracted p = " << p << std::endl;
}
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;
}