const Genome * Mutator::mutate(const Genome &genome) const { Genome *newGenome = new Genome(genome.getCountOfBases() + basesGained,genome.getCountOfBases() + basesGained); int nPieces = genome.getNumPieces(); const Genome::Piece *pieces = genome.getPieces(); for (int i = 0; i < nPieces; ++i) { const Genome::Piece &piece = pieces[i]; unsigned start = piece.beginningOffset; unsigned end = i + 1 < nPieces ? pieces[i + 1].beginningOffset : genome.getCountOfBases(); unsigned size = end - start; const Base *bases = genome.getSubstring(start, size); const char *name = piece.name; // printf("DEBUG: mutating %s of size %u, from %u to %u\n", name, size, start, end); newGenome->startPiece(name); getOrElse(chromMutators, string(name)).mutate(bases, bases + size, newGenome); } return newGenome; }
Pos getTranslation(const string &chrom, Pos pos) const { return getOrElse(chromMutators, chrom).getTranslation(pos); }
const Value& EntityMap<Key, Value>::getOrElse(WeakPointer<const Key> key, const Value& value) const { return getOrElse(key->getUniqueId(), value); }
const Value& EntityMap<Key, Value>::getOrElse(const Key* key, const Value& value) const { return getOrElse(key->getUniqueId(), value); }