#include <iostream>
#include <vector>
#include "bm.h"
#include "bmsparsevec.h"
#include "bmsparsevec_compr.h"
#include "bmsparsevec_serial.h"
#include "bmundef.h"
using namespace std;
template<typename SV> void PrintSV(const SV& sv)
{
auto sz = sv.size();
cout << "size() = " << sz << " : ";
for (typename SV::size_type i = 0; i < sz; ++i)
{
if (sv.is_null(i))
cout << "NULL";
else
cout << sv.get(i);
cout << ", ";
}
cout << endl;
}
typedef bm::sparse_vector<unsigned, bm::bvector<> > sparse_vector_u32;
typedef bm::rsc_sparse_vector<unsigned, sparse_vector_u32 > rsc_sparse_vector_u32;
int main(void)
{
try
{
rsc_sparse_vector_u32 csv1;
rsc_sparse_vector_u32 csv2;
{
auto bit = csv1.get_back_inserter();
bit = 10;
bit = 11;
bit.add_null();
bit = 13;
bit = 14;
bit.add_null(2);
bit = 256;
bit.flush();
csv1.sync();
}
PrintSV(csv1);
bm::sparse_vector_serial_layout<rsc_sparse_vector_u32> sv_lay;
{
BM_DECLARE_TEMP_BLOCK(tb)
csv1.optimize(tb);
bm::sparse_vector_serializer<rsc_sparse_vector_u32> sv_serializer;
sv_serializer.set_bookmarks(true, 64);
sv_serializer.serialize(csv1, sv_lay); }
const unsigned char* buf = sv_lay.buf();
bm::sparse_vector_deserializer<rsc_sparse_vector_u32> sv_deserial;
{
rsc_sparse_vector_u32::bvector_type bv_mask;
bv_mask.set(0);
bv_mask.set(1);
sv_deserial.deserialize(csv2, buf, bv_mask);
}
PrintSV(csv2);
{
sv_deserial.deserialize_range(csv2, buf, 1, 4);
}
PrintSV(csv2);
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}