6 #include "misc/definitions.h"
7 #include "bits/bitbuffer.h"
8 #include "bits/deltavector.h"
18 const static usint BLOCK_SIZE = 16;
20 SASamples(std::ifstream& sample_file, usint sample_rate);
21 SASamples(usint* array, usint data_size, usint sample_rate);
24 // Destroys contents of index and increment.
25 // We assume index and increment have same sample rate.
26 SASamples(SASamples& index, SASamples& increment, usint* positions, usint number_of_positions);
28 void writeTo(std::ofstream& sample_file);
30 // Returns i such that SA[i] = value.
31 // If SA[i] is not sampled, returns the next sampled value. (Don't try!)
32 // Value is actual 0-based suffix array value.
33 // Returns size if value is too large.
34 usint inverseSA(usint value);
36 // Returns the value of ith sample in suffix array order.
37 inline usint getSample(usint i)
39 return std::min(this->samples->readItem(i) * this->rate, this->size - 1);
42 // Returns (ind, sample number) where ind >= index or (size, ???).
43 pair_type getFirstSampleAfter(usint index);
45 inline usint getSampleRate() { return this->rate; }
46 inline usint getNumberOfSamples() { return this->items; }
52 usint rate, size, items;
56 FastBitBuffer* samples;
57 FastBitBuffer* inverse_samples;
59 void buildInverseSamples();
61 // Note: contents of original samples are deleted.
62 void mergeSamples(SASamples& index, SASamples& increment, usint* positions, usint n);