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