void LogSequence2::add(IteratorUInt &elements) { if(IsMapped) { throw "Data structure read-only when mapped."; } size_t max = 0; numentries = 0; // Count and calculate number of bits needed per element. while(elements.hasNext()) { size_t element = elements.next(); max = element > max ? element : max; numentries++; } // Prepare array numbits = bits(max); data.clear(); data.resize(numElementsFor(numbits, numentries)); array = &data[0]; arraysize = data.size(); // Save elements.goToStart(); size_t count = 0; while(elements.hasNext()) { size_t element = elements.next(); set_field(&array[0], numbits, count, element); count++; } }
void WaveletSequence::add(IteratorUInt &elements) { std::vector<unsigned int> vector; while(elements.hasNext()) { size_t element = elements.next(); if(element>((size_t)-1)) { throw "Trying to insert a value bigger than the permitted for the architecture"; } vector.push_back(element); } if(sequence!=NULL) { delete sequence; sequence=NULL; } cds_static::BitSequenceBuilder *builder = new cds_static::BitSequenceBuilderRG(20); cds_static::Mapper *mapper = new cds_static::MapperNone(); sequence = new cds_static::WaveletTreeNoptrs(&vector[0], vector.size(), builder, mapper); }