5 #include "lcpsamples.h"
6 #include "misc/utils.h"
13 LCPSamples::LCPSamples(std::ifstream& sample_file)
15 this->indexes = new DeltaVector(sample_file);
16 this->values = new Array(sample_file);
18 this->size = indexes->getSize();
19 this->items = indexes->getNumberOfItems();
22 LCPSamples::LCPSamples(pair_type* input, usint _size, usint _items, bool report, bool free_input) :
26 DeltaEncoder index_encoder(LCPSamples::INDEX_BLOCK_SIZE);
27 ArrayEncoder value_encoder(LCPSamples::VALUE_BLOCK_SIZE);
30 for(usint i = 0; i < this->items; i++)
32 index_encoder.setBit(input[i].first);
33 value_encoder.addItem(input[i].second + 1);
34 max_sample = std::max(max_sample, input[i].second);
37 this->indexes = new DeltaVector(index_encoder, this->size);
38 this->values = new Array(value_encoder);
40 if(free_input) { delete[] input; }
44 usint max_bits = length(max_sample);
45 double total_size = max_bits * (double)(this->items) / (CHAR_BIT * (double)MEGABYTE);
46 std::cout << "Maximum sample value: " << max_sample << " (" << max_bits << " bits)" << std::endl;
47 std::cout << "Raw samples: " << total_size << " MB" << std::endl;
48 std::cout << "Encoded samples: " << (this->values->reportSize() / (double)MEGABYTE) << " MB" << std::endl;
49 std::cout << std::endl;
53 LCPSamples::LCPSamples(DeltaEncoder& index_encoder, ArrayEncoder& value_encoder, usint _size) :
56 this->indexes = new DeltaVector(index_encoder, this->size);
57 this->values = new Array(value_encoder);
58 this->items = this->indexes->getNumberOfItems();
61 LCPSamples::~LCPSamples()
68 LCPSamples::writeTo(std::ofstream& sample_file) const
70 this->indexes->writeTo(sample_file);
71 this->values->writeTo(sample_file);
74 //--------------------------------------------------------------------------
77 LCPSamples::reportSize() const
79 usint bytes = sizeof(*this);
80 bytes += this->indexes->reportSize();
81 bytes += this->values->reportSize();
85 //--------------------------------------------------------------------------