Example #1
0
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++;
	}

}
Example #2
0
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);
}