// Generated by using Rcpp::compileAttributes() -> do not edit by hand
// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393

#include <Rcpp.h>

using namespace Rcpp;

#ifdef RCPP_USE_GLOBAL_ROSTREAM
Rcpp::Rostream<true>&  Rcpp::Rcout = Rcpp::Rcpp_cout_get();
Rcpp::Rostream<false>& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get();
#endif

// calcNearestStringDist
IntegerVector calcNearestStringDist(std::vector<std::string> x, std::string metric, int nThreads);
RcppExport SEXP _mutscan_calcNearestStringDist(SEXP xSEXP, SEXP metricSEXP, SEXP nThreadsSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::vector<std::string> >::type x(xSEXP);
    Rcpp::traits::input_parameter< std::string >::type metric(metricSEXP);
    Rcpp::traits::input_parameter< int >::type nThreads(nThreadsSEXP);
    rcpp_result_gen = Rcpp::wrap(calcNearestStringDist(x, metric, nThreads));
    return rcpp_result_gen;
END_RCPP
}
// complement
char complement(char n);
RcppExport SEXP _mutscan_complement(SEXP nSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< char >::type n(nSEXP);
    rcpp_result_gen = Rcpp::wrap(complement(n));
    return rcpp_result_gen;
END_RCPP
}
// compareCodonPositions
bool compareCodonPositions(std::string a, std::string b, const char mutNameDelimiter);
RcppExport SEXP _mutscan_compareCodonPositions(SEXP aSEXP, SEXP bSEXP, SEXP mutNameDelimiterSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::string >::type a(aSEXP);
    Rcpp::traits::input_parameter< std::string >::type b(bSEXP);
    Rcpp::traits::input_parameter< const char >::type mutNameDelimiter(mutNameDelimiterSEXP);
    rcpp_result_gen = Rcpp::wrap(compareCodonPositions(a, b, mutNameDelimiter));
    return rcpp_result_gen;
END_RCPP
}
// translateString
std::string translateString(const std::string& s);
RcppExport SEXP _mutscan_translateString(SEXP sSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const std::string& >::type s(sSEXP);
    rcpp_result_gen = Rcpp::wrap(translateString(s));
    return rcpp_result_gen;
END_RCPP
}
// makeBaseHGVS
std::string makeBaseHGVS(const std::vector<std::string> mutationsSorted, const std::string mutNameDelimiter, const std::string wtSeq, const std::string varSeq);
RcppExport SEXP _mutscan_makeBaseHGVS(SEXP mutationsSortedSEXP, SEXP mutNameDelimiterSEXP, SEXP wtSeqSEXP, SEXP varSeqSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const std::vector<std::string> >::type mutationsSorted(mutationsSortedSEXP);
    Rcpp::traits::input_parameter< const std::string >::type mutNameDelimiter(mutNameDelimiterSEXP);
    Rcpp::traits::input_parameter< const std::string >::type wtSeq(wtSeqSEXP);
    Rcpp::traits::input_parameter< const std::string >::type varSeq(varSeqSEXP);
    rcpp_result_gen = Rcpp::wrap(makeBaseHGVS(mutationsSorted, mutNameDelimiter, wtSeq, varSeq));
    return rcpp_result_gen;
END_RCPP
}
// test_makeAAHGVS
std::string test_makeAAHGVS(const std::vector<std::string> mutationsSorted, const std::string mutNameDelimiter, const std::string wtSeq);
RcppExport SEXP _mutscan_test_makeAAHGVS(SEXP mutationsSortedSEXP, SEXP mutNameDelimiterSEXP, SEXP wtSeqSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const std::vector<std::string> >::type mutationsSorted(mutationsSortedSEXP);
    Rcpp::traits::input_parameter< const std::string >::type mutNameDelimiter(mutNameDelimiterSEXP);
    Rcpp::traits::input_parameter< const std::string >::type wtSeq(wtSeqSEXP);
    rcpp_result_gen = Rcpp::wrap(test_makeAAHGVS(mutationsSorted, mutNameDelimiter, wtSeq));
    return rcpp_result_gen;
END_RCPP
}
// test_compareToWildtype
Rcpp::List test_compareToWildtype(const std::string varSeq, const std::string wtSeq, const std::vector<int> varIntQual, const std::vector<std::string> forbiddenCodons_vect, const double mutatedPhredMin, const int nbrMutatedCodonsMax, const std::string codonPrefix, const int nbrMutatedBasesMax, const std::string mutNameDelimiter, const bool collapseToWT);
RcppExport SEXP _mutscan_test_compareToWildtype(SEXP varSeqSEXP, SEXP wtSeqSEXP, SEXP varIntQualSEXP, SEXP forbiddenCodons_vectSEXP, SEXP mutatedPhredMinSEXP, SEXP nbrMutatedCodonsMaxSEXP, SEXP codonPrefixSEXP, SEXP nbrMutatedBasesMaxSEXP, SEXP mutNameDelimiterSEXP, SEXP collapseToWTSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const std::string >::type varSeq(varSeqSEXP);
    Rcpp::traits::input_parameter< const std::string >::type wtSeq(wtSeqSEXP);
    Rcpp::traits::input_parameter< const std::vector<int> >::type varIntQual(varIntQualSEXP);
    Rcpp::traits::input_parameter< const std::vector<std::string> >::type forbiddenCodons_vect(forbiddenCodons_vectSEXP);
    Rcpp::traits::input_parameter< const double >::type mutatedPhredMin(mutatedPhredMinSEXP);
    Rcpp::traits::input_parameter< const int >::type nbrMutatedCodonsMax(nbrMutatedCodonsMaxSEXP);
    Rcpp::traits::input_parameter< const std::string >::type codonPrefix(codonPrefixSEXP);
    Rcpp::traits::input_parameter< const int >::type nbrMutatedBasesMax(nbrMutatedBasesMaxSEXP);
    Rcpp::traits::input_parameter< const std::string >::type mutNameDelimiter(mutNameDelimiterSEXP);
    Rcpp::traits::input_parameter< const bool >::type collapseToWT(collapseToWTSEXP);
    rcpp_result_gen = Rcpp::wrap(test_compareToWildtype(varSeq, wtSeq, varIntQual, forbiddenCodons_vect, mutatedPhredMin, nbrMutatedCodonsMax, codonPrefix, nbrMutatedBasesMax, mutNameDelimiter, collapseToWT));
    return rcpp_result_gen;
END_RCPP
}
// test_decomposeRead
List test_decomposeRead(const std::string sseq, const std::string squal, const std::string elements, const std::vector<int> elementLengths, const std::vector<std::string> primerSeqs, std::string umiSeq, std::string varSeq, std::string varQual, std::vector<int> varLengths, std::string constSeq, std::string constQual, int nNoPrimer, int nReadWrongLength);
RcppExport SEXP _mutscan_test_decomposeRead(SEXP sseqSEXP, SEXP squalSEXP, SEXP elementsSEXP, SEXP elementLengthsSEXP, SEXP primerSeqsSEXP, SEXP umiSeqSEXP, SEXP varSeqSEXP, SEXP varQualSEXP, SEXP varLengthsSEXP, SEXP constSeqSEXP, SEXP constQualSEXP, SEXP nNoPrimerSEXP, SEXP nReadWrongLengthSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const std::string >::type sseq(sseqSEXP);
    Rcpp::traits::input_parameter< const std::string >::type squal(squalSEXP);
    Rcpp::traits::input_parameter< const std::string >::type elements(elementsSEXP);
    Rcpp::traits::input_parameter< const std::vector<int> >::type elementLengths(elementLengthsSEXP);
    Rcpp::traits::input_parameter< const std::vector<std::string> >::type primerSeqs(primerSeqsSEXP);
    Rcpp::traits::input_parameter< std::string >::type umiSeq(umiSeqSEXP);
    Rcpp::traits::input_parameter< std::string >::type varSeq(varSeqSEXP);
    Rcpp::traits::input_parameter< std::string >::type varQual(varQualSEXP);
    Rcpp::traits::input_parameter< std::vector<int> >::type varLengths(varLengthsSEXP);
    Rcpp::traits::input_parameter< std::string >::type constSeq(constSeqSEXP);
    Rcpp::traits::input_parameter< std::string >::type constQual(constQualSEXP);
    Rcpp::traits::input_parameter< int >::type nNoPrimer(nNoPrimerSEXP);
    Rcpp::traits::input_parameter< int >::type nReadWrongLength(nReadWrongLengthSEXP);
    rcpp_result_gen = Rcpp::wrap(test_decomposeRead(sseq, squal, elements, elementLengths, primerSeqs, umiSeq, varSeq, varQual, varLengths, constSeq, constQual, nNoPrimer, nReadWrongLength));
    return rcpp_result_gen;
END_RCPP
}
// test_mergeReadPairPartial
List test_mergeReadPairPartial(std::string seqF, std::vector<int> qualF, std::string seqR, std::vector<int> qualR, std::vector<int> lenF, std::vector<int> lenR, size_t minOverlap, size_t maxOverlap, size_t minMergedLength, size_t maxMergedLength, double maxFracMismatchOverlap, bool greedy);
RcppExport SEXP _mutscan_test_mergeReadPairPartial(SEXP seqFSEXP, SEXP qualFSEXP, SEXP seqRSEXP, SEXP qualRSEXP, SEXP lenFSEXP, SEXP lenRSEXP, SEXP minOverlapSEXP, SEXP maxOverlapSEXP, SEXP minMergedLengthSEXP, SEXP maxMergedLengthSEXP, SEXP maxFracMismatchOverlapSEXP, SEXP greedySEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::string >::type seqF(seqFSEXP);
    Rcpp::traits::input_parameter< std::vector<int> >::type qualF(qualFSEXP);
    Rcpp::traits::input_parameter< std::string >::type seqR(seqRSEXP);
    Rcpp::traits::input_parameter< std::vector<int> >::type qualR(qualRSEXP);
    Rcpp::traits::input_parameter< std::vector<int> >::type lenF(lenFSEXP);
    Rcpp::traits::input_parameter< std::vector<int> >::type lenR(lenRSEXP);
    Rcpp::traits::input_parameter< size_t >::type minOverlap(minOverlapSEXP);
    Rcpp::traits::input_parameter< size_t >::type maxOverlap(maxOverlapSEXP);
    Rcpp::traits::input_parameter< size_t >::type minMergedLength(minMergedLengthSEXP);
    Rcpp::traits::input_parameter< size_t >::type maxMergedLength(maxMergedLengthSEXP);
    Rcpp::traits::input_parameter< double >::type maxFracMismatchOverlap(maxFracMismatchOverlapSEXP);
    Rcpp::traits::input_parameter< bool >::type greedy(greedySEXP);
    rcpp_result_gen = Rcpp::wrap(test_mergeReadPairPartial(seqF, qualF, seqR, qualR, lenF, lenR, minOverlap, maxOverlap, minMergedLength, maxMergedLength, maxFracMismatchOverlap, greedy));
    return rcpp_result_gen;
END_RCPP
}
// findClosestRefSeq
int findClosestRefSeq(std::string& varSeq, std::vector<std::string>& wtSeq, size_t upperBoundMismatch, int& sim);
RcppExport SEXP _mutscan_findClosestRefSeq(SEXP varSeqSEXP, SEXP wtSeqSEXP, SEXP upperBoundMismatchSEXP, SEXP simSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::string& >::type varSeq(varSeqSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string>& >::type wtSeq(wtSeqSEXP);
    Rcpp::traits::input_parameter< size_t >::type upperBoundMismatch(upperBoundMismatchSEXP);
    Rcpp::traits::input_parameter< int& >::type sim(simSEXP);
    rcpp_result_gen = Rcpp::wrap(findClosestRefSeq(varSeq, wtSeq, upperBoundMismatch, sim));
    return rcpp_result_gen;
END_RCPP
}
// findClosestRefSeqEarlyStop
int findClosestRefSeqEarlyStop(std::string& varSeq, std::vector<std::string>& wtSeq, size_t upperBoundMismatch, int& sim);
RcppExport SEXP _mutscan_findClosestRefSeqEarlyStop(SEXP varSeqSEXP, SEXP wtSeqSEXP, SEXP upperBoundMismatchSEXP, SEXP simSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::string& >::type varSeq(varSeqSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string>& >::type wtSeq(wtSeqSEXP);
    Rcpp::traits::input_parameter< size_t >::type upperBoundMismatch(upperBoundMismatchSEXP);
    Rcpp::traits::input_parameter< int& >::type sim(simSEXP);
    rcpp_result_gen = Rcpp::wrap(findClosestRefSeqEarlyStop(varSeq, wtSeq, upperBoundMismatch, sim));
    return rcpp_result_gen;
END_RCPP
}
// groupSimilarSequences
Rcpp::DataFrame groupSimilarSequences(std::vector<std::string> seqs, std::vector<double> scores, double collapseMaxDist, double collapseMinScore, double collapseMinRatio, bool verbose);
RcppExport SEXP _mutscan_groupSimilarSequences(SEXP seqsSEXP, SEXP scoresSEXP, SEXP collapseMaxDistSEXP, SEXP collapseMinScoreSEXP, SEXP collapseMinRatioSEXP, SEXP verboseSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::vector<std::string> >::type seqs(seqsSEXP);
    Rcpp::traits::input_parameter< std::vector<double> >::type scores(scoresSEXP);
    Rcpp::traits::input_parameter< double >::type collapseMaxDist(collapseMaxDistSEXP);
    Rcpp::traits::input_parameter< double >::type collapseMinScore(collapseMinScoreSEXP);
    Rcpp::traits::input_parameter< double >::type collapseMinRatio(collapseMinRatioSEXP);
    Rcpp::traits::input_parameter< bool >::type verbose(verboseSEXP);
    rcpp_result_gen = Rcpp::wrap(groupSimilarSequences(seqs, scores, collapseMaxDist, collapseMinScore, collapseMinRatio, verbose));
    return rcpp_result_gen;
END_RCPP
}
// digestFastqsCpp
List digestFastqsCpp(std::vector<std::string> fastqForwardVect, std::vector<std::string> fastqReverseVect, bool mergeForwardReverse, size_t minOverlap, size_t maxOverlap, size_t minMergedLength, size_t maxMergedLength, double maxFracMismatchOverlap, bool greedyOverlap, bool revComplForward, bool revComplReverse, std::string elementsForward, std::vector<int> elementLengthsForward, std::string elementsReverse, std::vector<int> elementLengthsReverse, std::string adapterForward, std::string adapterReverse, std::vector<std::string> primerForward, std::vector<std::string> primerReverse, std::vector<std::string> wildTypeForward, std::vector<std::string> wildTypeForwardNames, std::vector<std::string> wildTypeReverse, std::vector<std::string> wildTypeReverseNames, std::vector<std::string> constantForward, std::vector<std::string> constantReverse, double avePhredMinForward, double avePhredMinReverse, int variableNMaxForward, int variableNMaxReverse, int umiNMax, int nbrMutatedCodonsMaxForward, int nbrMutatedCodonsMaxReverse, int nbrMutatedBasesMaxForward, int nbrMutatedBasesMaxReverse, CharacterVector forbiddenMutatedCodonsForward, CharacterVector forbiddenMutatedCodonsReverse, bool useTreeWTmatch, bool collapseToWTForward, bool collapseToWTReverse, double mutatedPhredMinForward, double mutatedPhredMinReverse, std::string mutNameDelimiter, int constantMaxDistForward, int constantMaxDistReverse, double umiCollapseMaxDist, std::string filteredReadsFastqForward, std::string filteredReadsFastqReverse, int maxNReads, bool verbose, int nThreads, int chunkSize, size_t maxReadLength);
RcppExport SEXP _mutscan_digestFastqsCpp(SEXP fastqForwardVectSEXP, SEXP fastqReverseVectSEXP, SEXP mergeForwardReverseSEXP, SEXP minOverlapSEXP, SEXP maxOverlapSEXP, SEXP minMergedLengthSEXP, SEXP maxMergedLengthSEXP, SEXP maxFracMismatchOverlapSEXP, SEXP greedyOverlapSEXP, SEXP revComplForwardSEXP, SEXP revComplReverseSEXP, SEXP elementsForwardSEXP, SEXP elementLengthsForwardSEXP, SEXP elementsReverseSEXP, SEXP elementLengthsReverseSEXP, SEXP adapterForwardSEXP, SEXP adapterReverseSEXP, SEXP primerForwardSEXP, SEXP primerReverseSEXP, SEXP wildTypeForwardSEXP, SEXP wildTypeForwardNamesSEXP, SEXP wildTypeReverseSEXP, SEXP wildTypeReverseNamesSEXP, SEXP constantForwardSEXP, SEXP constantReverseSEXP, SEXP avePhredMinForwardSEXP, SEXP avePhredMinReverseSEXP, SEXP variableNMaxForwardSEXP, SEXP variableNMaxReverseSEXP, SEXP umiNMaxSEXP, SEXP nbrMutatedCodonsMaxForwardSEXP, SEXP nbrMutatedCodonsMaxReverseSEXP, SEXP nbrMutatedBasesMaxForwardSEXP, SEXP nbrMutatedBasesMaxReverseSEXP, SEXP forbiddenMutatedCodonsForwardSEXP, SEXP forbiddenMutatedCodonsReverseSEXP, SEXP useTreeWTmatchSEXP, SEXP collapseToWTForwardSEXP, SEXP collapseToWTReverseSEXP, SEXP mutatedPhredMinForwardSEXP, SEXP mutatedPhredMinReverseSEXP, SEXP mutNameDelimiterSEXP, SEXP constantMaxDistForwardSEXP, SEXP constantMaxDistReverseSEXP, SEXP umiCollapseMaxDistSEXP, SEXP filteredReadsFastqForwardSEXP, SEXP filteredReadsFastqReverseSEXP, SEXP maxNReadsSEXP, SEXP verboseSEXP, SEXP nThreadsSEXP, SEXP chunkSizeSEXP, SEXP maxReadLengthSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::vector<std::string> >::type fastqForwardVect(fastqForwardVectSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type fastqReverseVect(fastqReverseVectSEXP);
    Rcpp::traits::input_parameter< bool >::type mergeForwardReverse(mergeForwardReverseSEXP);
    Rcpp::traits::input_parameter< size_t >::type minOverlap(minOverlapSEXP);
    Rcpp::traits::input_parameter< size_t >::type maxOverlap(maxOverlapSEXP);
    Rcpp::traits::input_parameter< size_t >::type minMergedLength(minMergedLengthSEXP);
    Rcpp::traits::input_parameter< size_t >::type maxMergedLength(maxMergedLengthSEXP);
    Rcpp::traits::input_parameter< double >::type maxFracMismatchOverlap(maxFracMismatchOverlapSEXP);
    Rcpp::traits::input_parameter< bool >::type greedyOverlap(greedyOverlapSEXP);
    Rcpp::traits::input_parameter< bool >::type revComplForward(revComplForwardSEXP);
    Rcpp::traits::input_parameter< bool >::type revComplReverse(revComplReverseSEXP);
    Rcpp::traits::input_parameter< std::string >::type elementsForward(elementsForwardSEXP);
    Rcpp::traits::input_parameter< std::vector<int> >::type elementLengthsForward(elementLengthsForwardSEXP);
    Rcpp::traits::input_parameter< std::string >::type elementsReverse(elementsReverseSEXP);
    Rcpp::traits::input_parameter< std::vector<int> >::type elementLengthsReverse(elementLengthsReverseSEXP);
    Rcpp::traits::input_parameter< std::string >::type adapterForward(adapterForwardSEXP);
    Rcpp::traits::input_parameter< std::string >::type adapterReverse(adapterReverseSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type primerForward(primerForwardSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type primerReverse(primerReverseSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type wildTypeForward(wildTypeForwardSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type wildTypeForwardNames(wildTypeForwardNamesSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type wildTypeReverse(wildTypeReverseSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type wildTypeReverseNames(wildTypeReverseNamesSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type constantForward(constantForwardSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type constantReverse(constantReverseSEXP);
    Rcpp::traits::input_parameter< double >::type avePhredMinForward(avePhredMinForwardSEXP);
    Rcpp::traits::input_parameter< double >::type avePhredMinReverse(avePhredMinReverseSEXP);
    Rcpp::traits::input_parameter< int >::type variableNMaxForward(variableNMaxForwardSEXP);
    Rcpp::traits::input_parameter< int >::type variableNMaxReverse(variableNMaxReverseSEXP);
    Rcpp::traits::input_parameter< int >::type umiNMax(umiNMaxSEXP);
    Rcpp::traits::input_parameter< int >::type nbrMutatedCodonsMaxForward(nbrMutatedCodonsMaxForwardSEXP);
    Rcpp::traits::input_parameter< int >::type nbrMutatedCodonsMaxReverse(nbrMutatedCodonsMaxReverseSEXP);
    Rcpp::traits::input_parameter< int >::type nbrMutatedBasesMaxForward(nbrMutatedBasesMaxForwardSEXP);
    Rcpp::traits::input_parameter< int >::type nbrMutatedBasesMaxReverse(nbrMutatedBasesMaxReverseSEXP);
    Rcpp::traits::input_parameter< CharacterVector >::type forbiddenMutatedCodonsForward(forbiddenMutatedCodonsForwardSEXP);
    Rcpp::traits::input_parameter< CharacterVector >::type forbiddenMutatedCodonsReverse(forbiddenMutatedCodonsReverseSEXP);
    Rcpp::traits::input_parameter< bool >::type useTreeWTmatch(useTreeWTmatchSEXP);
    Rcpp::traits::input_parameter< bool >::type collapseToWTForward(collapseToWTForwardSEXP);
    Rcpp::traits::input_parameter< bool >::type collapseToWTReverse(collapseToWTReverseSEXP);
    Rcpp::traits::input_parameter< double >::type mutatedPhredMinForward(mutatedPhredMinForwardSEXP);
    Rcpp::traits::input_parameter< double >::type mutatedPhredMinReverse(mutatedPhredMinReverseSEXP);
    Rcpp::traits::input_parameter< std::string >::type mutNameDelimiter(mutNameDelimiterSEXP);
    Rcpp::traits::input_parameter< int >::type constantMaxDistForward(constantMaxDistForwardSEXP);
    Rcpp::traits::input_parameter< int >::type constantMaxDistReverse(constantMaxDistReverseSEXP);
    Rcpp::traits::input_parameter< double >::type umiCollapseMaxDist(umiCollapseMaxDistSEXP);
    Rcpp::traits::input_parameter< std::string >::type filteredReadsFastqForward(filteredReadsFastqForwardSEXP);
    Rcpp::traits::input_parameter< std::string >::type filteredReadsFastqReverse(filteredReadsFastqReverseSEXP);
    Rcpp::traits::input_parameter< int >::type maxNReads(maxNReadsSEXP);
    Rcpp::traits::input_parameter< bool >::type verbose(verboseSEXP);
    Rcpp::traits::input_parameter< int >::type nThreads(nThreadsSEXP);
    Rcpp::traits::input_parameter< int >::type chunkSize(chunkSizeSEXP);
    Rcpp::traits::input_parameter< size_t >::type maxReadLength(maxReadLengthSEXP);
    rcpp_result_gen = Rcpp::wrap(digestFastqsCpp(fastqForwardVect, fastqReverseVect, mergeForwardReverse, minOverlap, maxOverlap, minMergedLength, maxMergedLength, maxFracMismatchOverlap, greedyOverlap, revComplForward, revComplReverse, elementsForward, elementLengthsForward, elementsReverse, elementLengthsReverse, adapterForward, adapterReverse, primerForward, primerReverse, wildTypeForward, wildTypeForwardNames, wildTypeReverse, wildTypeReverseNames, constantForward, constantReverse, avePhredMinForward, avePhredMinReverse, variableNMaxForward, variableNMaxReverse, umiNMax, nbrMutatedCodonsMaxForward, nbrMutatedCodonsMaxReverse, nbrMutatedBasesMaxForward, nbrMutatedBasesMaxReverse, forbiddenMutatedCodonsForward, forbiddenMutatedCodonsReverse, useTreeWTmatch, collapseToWTForward, collapseToWTReverse, mutatedPhredMinForward, mutatedPhredMinReverse, mutNameDelimiter, constantMaxDistForward, constantMaxDistReverse, umiCollapseMaxDist, filteredReadsFastqForward, filteredReadsFastqReverse, maxNReads, verbose, nThreads, chunkSize, maxReadLength));
    return rcpp_result_gen;
END_RCPP
}
// mergeValues
DataFrame mergeValues(std::vector<std::string> mutNamesIn, std::vector<std::string> valuesIn, char delimiter);
RcppExport SEXP _mutscan_mergeValues(SEXP mutNamesInSEXP, SEXP valuesInSEXP, SEXP delimiterSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< std::vector<std::string> >::type mutNamesIn(mutNamesInSEXP);
    Rcpp::traits::input_parameter< std::vector<std::string> >::type valuesIn(valuesInSEXP);
    Rcpp::traits::input_parameter< char >::type delimiter(delimiterSEXP);
    rcpp_result_gen = Rcpp::wrap(mergeValues(mutNamesIn, valuesIn, delimiter));
    return rcpp_result_gen;
END_RCPP
}
// levenshtein_distance
int levenshtein_distance(const std::string& str1, const std::string& str2, int ignored_variable);
RcppExport SEXP _mutscan_levenshtein_distance(SEXP str1SEXP, SEXP str2SEXP, SEXP ignored_variableSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const std::string& >::type str1(str1SEXP);
    Rcpp::traits::input_parameter< const std::string& >::type str2(str2SEXP);
    Rcpp::traits::input_parameter< int >::type ignored_variable(ignored_variableSEXP);
    rcpp_result_gen = Rcpp::wrap(levenshtein_distance(str1, str2, ignored_variable));
    return rcpp_result_gen;
END_RCPP
}
// hamming_distance
int hamming_distance(const std::string& str1, const std::string& str2, int ignored_variable);
RcppExport SEXP _mutscan_hamming_distance(SEXP str1SEXP, SEXP str2SEXP, SEXP ignored_variableSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const std::string& >::type str1(str1SEXP);
    Rcpp::traits::input_parameter< const std::string& >::type str2(str2SEXP);
    Rcpp::traits::input_parameter< int >::type ignored_variable(ignored_variableSEXP);
    rcpp_result_gen = Rcpp::wrap(hamming_distance(str1, str2, ignored_variable));
    return rcpp_result_gen;
END_RCPP
}
// hamming_shift_distance
int hamming_shift_distance(const std::string& str1, const std::string& str2, int max_abs_shift);
RcppExport SEXP _mutscan_hamming_shift_distance(SEXP str1SEXP, SEXP str2SEXP, SEXP max_abs_shiftSEXP) {
BEGIN_RCPP
    Rcpp::RObject rcpp_result_gen;
    Rcpp::RNGScope rcpp_rngScope_gen;
    Rcpp::traits::input_parameter< const std::string& >::type str1(str1SEXP);
    Rcpp::traits::input_parameter< const std::string& >::type str2(str2SEXP);
    Rcpp::traits::input_parameter< int >::type max_abs_shift(max_abs_shiftSEXP);
    rcpp_result_gen = Rcpp::wrap(hamming_shift_distance(str1, str2, max_abs_shift));
    return rcpp_result_gen;
END_RCPP
}

RcppExport SEXP _rcpp_module_boot_mod_BKtree();

static const R_CallMethodDef CallEntries[] = {
    {"_mutscan_calcNearestStringDist", (DL_FUNC) &_mutscan_calcNearestStringDist, 3},
    {"_mutscan_complement", (DL_FUNC) &_mutscan_complement, 1},
    {"_mutscan_compareCodonPositions", (DL_FUNC) &_mutscan_compareCodonPositions, 3},
    {"_mutscan_translateString", (DL_FUNC) &_mutscan_translateString, 1},
    {"_mutscan_makeBaseHGVS", (DL_FUNC) &_mutscan_makeBaseHGVS, 4},
    {"_mutscan_test_makeAAHGVS", (DL_FUNC) &_mutscan_test_makeAAHGVS, 3},
    {"_mutscan_test_compareToWildtype", (DL_FUNC) &_mutscan_test_compareToWildtype, 10},
    {"_mutscan_test_decomposeRead", (DL_FUNC) &_mutscan_test_decomposeRead, 13},
    {"_mutscan_test_mergeReadPairPartial", (DL_FUNC) &_mutscan_test_mergeReadPairPartial, 12},
    {"_mutscan_findClosestRefSeq", (DL_FUNC) &_mutscan_findClosestRefSeq, 4},
    {"_mutscan_findClosestRefSeqEarlyStop", (DL_FUNC) &_mutscan_findClosestRefSeqEarlyStop, 4},
    {"_mutscan_groupSimilarSequences", (DL_FUNC) &_mutscan_groupSimilarSequences, 6},
    {"_mutscan_digestFastqsCpp", (DL_FUNC) &_mutscan_digestFastqsCpp, 52},
    {"_mutscan_mergeValues", (DL_FUNC) &_mutscan_mergeValues, 3},
    {"_mutscan_levenshtein_distance", (DL_FUNC) &_mutscan_levenshtein_distance, 3},
    {"_mutscan_hamming_distance", (DL_FUNC) &_mutscan_hamming_distance, 3},
    {"_mutscan_hamming_shift_distance", (DL_FUNC) &_mutscan_hamming_shift_distance, 3},
    {"_rcpp_module_boot_mod_BKtree", (DL_FUNC) &_rcpp_module_boot_mod_BKtree, 0},
    {NULL, NULL, 0}
};

RcppExport void R_init_mutscan(DllInfo *dll) {
    R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
    R_useDynamicSymbols(dll, FALSE);
}
