#include <iostream>
#include <vector>
#include "bm.h"
#include "bmsparsevec.h"
#include "bmundef.h"
using namespace std;
static
void print_svector(const bm::sparse_vector<unsigned, bm::bvector<> >& 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;
}
int main(void)
{
try
{
bm::sparse_vector<unsigned, bm::bvector<> > sv1(bm::use_null);
sv1.resize(10);
sv1.set(2, 25);
sv1.set(3, 35);
sv1.set(7, 75);
print_svector(sv1);
sv1.set_null(7);
print_svector(sv1);
unsigned arr[3] = {1,2,3};
sv1.import(arr, 3, 9); print_svector(sv1);
sv1.clear(2, true); print_svector(sv1);
sv1.clear(2, false); print_svector(sv1);
sv1.clear(3, false); print_svector(sv1);
sv1.clear();
print_svector(sv1);
sv1.resize(3);
print_svector(sv1);
sv1.push_back(10);
sv1.push_back(20);
print_svector(sv1);
bm::sparse_vector<unsigned, bm::bvector<> > sv2;
sv2.push_back(100);
sv2.push_back(200);
sv1.join(sv2);
print_svector(sv1);
bm::sparse_vector<unsigned, bm::bvector<> > sv3(bm::use_null);
sv3.resize(9);
sv3.push_back(300);
sv1.join(sv3);
print_svector(sv1);
{
const bm::bvector<>* bv_non_null = sv1.get_null_bvector();
if (bv_non_null)
{
bm::bvector<>::enumerator en = bv_non_null->first();
for (; en.valid(); ++en)
{
unsigned idx = *en;
unsigned v = sv1[idx];
std::cout << "[" << idx << "] = " << v << ", ";
}
std::cout << endl;
}
}
{
std::vector<unsigned> v1(sv1.size());
sv1.decode(&v1[0], 0, sv1.size());
for (unsigned i = 0; i < v1.size(); ++i)
{
cout << v1[i] << ",";
}
cout << endl;
}
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}