#include <iostream>
#include <vector>
#include "bm.h"
#include "bmsparsevec.h"
#include "bmsparsevec_algo.h"
#include "bmundef.h"
using namespace std;
typedef bm::sparse_vector<bm::id_t, bm::bvector<> > sparse_vector_u32;
static
void print_svector(const sparse_vector_u32& sv)
{
if (sv.size() == 0)
{
cout << sv.size() << ": [ EMPTY ]" << endl;
return;
}
cout << sv.size() << ": [ ";
for (unsigned i = 0; i < sv.size(); ++i)
{
unsigned v = sv.at(i);
bool is_null = sv.is_null(i);
if (is_null)
cout << "NULL";
else
cout << v << "";
if (i == sv.size()-1)
cout << " ]";
else
cout << ", ";
}
cout << endl;
}
inline
void print_bvector(const bm::bvector<>& bv)
{
cout << "( count = " << bv.count() << ")" << ": [";
bm::bvector<>::enumerator en = bv.first();
for (; en.valid(); ++en)
{
cout << *en << ", ";
}
cout << "]" << endl;
}
int main(void)
{
try
{
sparse_vector_u32 sv_transform(bm::use_null);
sv_transform.set(2, 25);
sv_transform.set(3, 35);
sv_transform.set(7, 75);
sv_transform.set(1000, 2000);
sv_transform.set(256, 2001);
print_svector(sv_transform);
bm::bvector<> bv_in { 1, 2, 3, 1000, 256 };
bm::bvector<> bv_out;
bm::set2set_11_transform<sparse_vector_u32> func;
func.run(bv_in, sv_transform, bv_out);
std::cout << "re-mapped vector:" << endl;
print_bvector(bv_out);
bm::id_t from = 1;
bm::id_t to;
bool found = func.remap(1, sv_transform, to);
if (!found)
std::cout << from << " not mapped" << std::endl; else
std::cout << from << " mapped to " << to << std::endl;
sparse_vector_u32 sv_transform2;
sv_transform2.set(2, 25);
sv_transform2.set(3, 35);
sv_transform2.set(7, 75);
sv_transform2.set(1000, 2000);
sv_transform2.set(256, 2001);
found = func.remap(1, sv_transform2, to);
if (!found)
std::cout << from << " not mapped" << std::endl;
else
std::cout << from << " mapped to " << to << std::endl;
func.run(bv_in, sv_transform2, bv_out);
std::cout << "re-mapped vector2:" << endl;
print_bvector(bv_out);
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}