class BitSetGrayCodeBinaryRepresentation extends BitSetBinaryRepresentation {

    @Override
    protected BitSet decodeGenomeToBinary() {
        BitSet binaryGenome = new BitSet(this.genomeLength);
        int index = 0; // index in entire genome; stored from MSB to LSB
        for (int variable = 0; variable < this.descriptor.numVariables; variable++){
            binaryGenome.set(index, this.genome.get(index++)); // MSB bit of every variable is preserved
            for (int i = 1; i < this.descriptor.variablesLengths[variable]; i++){
                binaryGenome.set(index, binaryGenome.get(index-1) ^ this.genome.get(index++));
            }
        }
        return binaryGenome;
    }

    public  BitSetGrayCodeBinaryRepresentation(SimpleBinaryGenomeDescriptor descriptor);
    public  BitSetGrayCodeBinaryRepresentation(BitSetGrayCodeBinaryRepresentation second);

}