Based a Genotype class on VariantFieldValue

With a couple GT specific operators, including separating out the alleles.

Heavily based off htslib and comment stream in #77.
Can you link to one of the threads? I'm not sure what you mean by "be
explicit"? Is that just adding the keyword explicit or adding xxx = default?


On Tue, Jul 29, 2014 at 1:20 AM, droazen <notifications@github.com> wrote:

> In gamgee/genotype.h:
>
> > +namespace gamgee {
> > +
> > +/**
> > + * @brief Encodes genotype.
> > + */
> > +class Genotype{
> > +
> > +  public:
> > +  /**
> > +   * @brief Constructs a genotype.
> > +   * @param body The shared memory variant "line" from a vcf, or bcf.
> > +   * @param format_ptr The GT field from the line.
> > +   * @param data_ptr The GT for this sample.
> > +   */
> > +  Genotype(const std::shared_ptr<bcf1_t>& body, const bcf_fmt_t* const format_ptr, const uint8_t* data_ptr);
> > +
>
> Be explicit about using the default copy/move constructors/assignment
> operators and destructor (ie., use "= default"), instead of relying on the
> complicated rules for implicit generation. There are way too many threads
> on stackoverflow from people who got burned thinking a move
> constructor/assignment operator had been implicitly generated when it
> actually hadn't.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/broadinstitute/gamgee/pull/133/files#r15476141>.
>