broadinstitute/gamgee — pull request #319 by droazen (2014-10-24 11:26:35+00:00)
Title: VariantBuilder (for final review and merge)

VariantBuilder: high-performance creation of Variant records

-Supports setting and removal of all fields in Variant
records using a variety of inputs and calling strategies.

-Queues up tranformations to the record and applies them
at build time so that the final data is encoded only once.

-Flexible API allows the user to choose their desired
level of performance depending on how they are willing
to prepare their data (eg., setting by pre-flattened
vs. multi-dimensional vector, setting by move vs. copy,
setting by indices instead of names, etc.)

-Storage layer designed to store many small values as
contiguously as possible and with a minimum of new
allocations/deallocations.

-Builder objects designed for re-use across records to
avoid expensive re-creation of internal data structures.

-All validation can be disabled for a performance boost
once confidence is gained in a program.

-Requires upfront a VariantHeader with all fields, contigs,
and samples pre-declared.

Remaining TODOS (these will become tickets):

-Currently supports building Variants from scratch only;
building from an existing Variant is needed to optimize
for the case where only a few changes to a record are
going to be made.

-Integration with existing Individual/Shared Field/FieldValue
and Genotype classes.

-Fuller doxygen docs for the public API functions