useDynLib(Biostrings)

import(methods)
#importFrom(utils, "head", "tail")  # already imported from IRanges
import(IRanges)
importFrom(Biobase, "addVigs2WinMenu")


### ==========================================================================
### BASIC CONTAINERS
### --------------------------------------------------------------------------
###   IUPAC_CODE_MAP.R
###   AMINO_ACID_CODE.R
###   GENETIC_CODE.R
###   XStringCodec-class.R
###   xsbasetype.R
###   XString-class.R
###   XStringSet-class.R
###   XStringViews-class.R
###   XStringViews-constructors.R
###   MaskedXString-class.R
###   xscat.R

exportClasses(
    XString, BString, DNAString, RNAString, AAString,
    XStringSet, BStringSet, DNAStringSet, RNAStringSet, AAStringSet,
    XStringViews,
    MaskedXString, MaskedBString, MaskedDNAString, MaskedRNAString, MaskedAAString
)

export(
    ## IUPAC_CODE_MAP.R + AMINO_ACID_CODE.R + GENETIC_CODE.R:
    IUPAC_CODE_MAP, mergeIUPACLetters,
    AMINO_ACID_CODE, GENETIC_CODE,
    RNA_GENETIC_CODE,

    ## XStringCodec-class.R:
    DNA_BASES, RNA_BASES, DNA_ALPHABET, RNA_ALPHABET, AA_ALPHABET,

    ## xsbasetype.R:
    xsbasetype, "xsbasetype<-", alphabet,

    ## XString-class.R:
    BString, DNAString, RNAString, AAString,

    ## XStringSet-class.R:
    BStringSet, DNAStringSet, RNAStringSet, AAStringSet,

    ## XStringViews-constructors.R:
    adjacentViews, XStringViews,

    ## xscat.R:
    xscat,

    ## Old stuff (Defunct or Deprecated):
    BStringViews
)

exportMethods(
    length,
    nchar, width,
    xsbasetype, "xsbasetype<-", alphabet,
    names, "[", "[[", rep, append,
    union, intersect, setdiff, setequal,
    "%in%", match,
    show,
    "==", "!=", duplicated, unique, order, sort, rank,
    coerce, as.character, unlist, as.matrix, as.list, toString, toComplex,
    narrow, subseq, threebands, "subseq<-", reduce, gaps,
    Views, XStringViews,
    unmasked, maskedwidth, maskedratio, masks, "masks<-"
)


### ==========================================================================
### UTILITIES
### --------------------------------------------------------------------------
###   readFASTA.R
###   XStringSet-io.R
###   letter.R
###   subXString.R
###   letterFrequency.R
###   chartr.R
###   reverse.R
###   translate.R
###   toComplex.R
###   replaceLetterAt.R
###   injectHardMask.R

export(
    ## readFASTA.R:
    fasta.info, readFASTA, writeFASTA,

    ## XStringSet-io.R:
    FASTArecordsToCharacter, CharacterToFASTArecords,
    FASTArecordsToXStringViews, XStringSetToFASTArecords,
    fastq.geometry,
    read.XStringViews,
    read.BStringSet, read.DNAStringSet, read.RNAStringSet, read.AAStringSet,
    write.XStringSet, write.XStringViews,

    ## letter.R:
    letter,

    ## letterFrequency.R:
    alphabetFrequency, hasOnlyBaseLetters, uniqueLetters,
    consensusMatrix, consensusString,
    mkAllStrings,
    oligonucleotideFrequency,
    dinucleotideFrequency, trinucleotideFrequency,
    nucleotideFrequencyAt,
    oligonucleotideTransitions,

    ## reverse.R:
    complement, reverseComplement,
    strrev,

    ## translate.R:
    transcribe, cDNA, dna2rna, rna2dna,
    codons, translate,

    ## toComplex.R:
    toComplex,

    ## replaceLetterAt.R:
    replaceLetterAt, .inplaceReplaceLetterAt,

    ## injectHardMask.R:
    injectHardMask,

    ## Old stuff (Defunct or Deprecated):
    FASTArecordsToBStringViews, read.BStringViews, write.BStringViews,
    subXString, subBString,
    consmat,
    replaceLetterAtLoc
)

exportMethods(
    initialize, length, names, "[", "[[", rep,
    show,
    "==", "!=", duplicated, unique, order, sort, rank,
    coerce, as.character, as.matrix, as.list, toString, toComplex,

    letter,
    substr, substring,
    alphabetFrequency, hasOnlyBaseLetters, uniqueLetters,
    consensusMatrix, consensusString,
    oligonucleotideFrequency,
    nucleotideFrequencyAt,
    chartr,
    reverse, complement, reverseComplement,
    codons, translate,
    replaceLetterAt,
    maskMotif,
    injectHardMask,

    ## Old stuff (Defunct or Deprecated):
    as.complex,
    consmat
)


### ==========================================================================
### STRING MATCHING
### --------------------------------------------------------------------------
###   SparseList-class.R
###   Dups-class.R
###   MIndex-class.R
###   match-utils.R
###   matchPattern.R
###   matchPattern.BOC.R
###   matchPattern.BOC2.R
###   matchLRPatterns.R
###   trimLRPatterns.R
###   matchProbePair.R
###   matchPWM.R
###   findPalindromes.R
###   PDict-class.R
###   matchPDict.R

exportClasses(
    #SparseList,
    Dups,
    MIndex, ByPos_MIndex,
    BOC_SubjectString, BOC2_SubjectString,
    PreprocessedTB, Twobit, ACtree, ACtree2,
    PDict3Parts, PDict, TB_PDict, MTB_PDict
)

export(
    ## MIndex-class.R
    startIndex, endIndex, countIndex,
    extractAllMatches,

    ## match-utils.R
    neditStartingAt, neditEndingAt, neditAt,
    isMatchingStartingAt, isMatchingEndingAt, isMatchingAt,
    hasLetterAt,
    mismatch, nmatch, nmismatch,

    ## matchPattern.R
    gregexpr2, matchPattern, countPattern, vmatchPattern, vcountPattern,

    ## maskMotif.R
    maskMotif, mask,

    ## matchLRPatterns.R
    matchLRPatterns,

    ## trimLRPatterns.R
    trimLRPatterns,

    ## matchProbePair.R
    matchProbePair,

    ## matchPWM.R
    maxWeights, maxScore,
    PWMscoreStartingAt, matchPWM, countPWM,

    ## findPalindromes.R
    findPalindromes, findComplementedPalindromes,
    palindromeArmLength, complementedPalindromeArmLength,
    palindromeLeftArm, complementedPalindromeLeftArm,
    palindromeRightArm, complementedPalindromeRightArm,

    ## PDict-class.R + matchPDict.R
    tb, tb.width, patternFrequency, PDict,
    matchPDict, countPDict, whichPDict, vmatchPDict, vcountPDict,
 
    ## Old stuff (Defunct or Deprecated):
    nmismatchStartingAt, nmismatchEndingAt, isMatching,
    matchDNAPattern,
    PWMscore
)

exportMethods(
    ls,
    length, names, "names<-", show, "[[",
    startIndex, endIndex, countIndex, unlist,
    neditStartingAt, neditEndingAt,
    isMatchingStartingAt, isMatchingEndingAt,
    mismatch, nmatch, nmismatch,
    coverage,
    matchPattern, countPattern, vcountPattern,
    matchLRPatterns, trimLRPatterns,
    matchProbePair,
    findPalindromes, findComplementedPalindromes,
    palindromeArmLength, complementedPalindromeArmLength,
    palindromeLeftArm, complementedPalindromeLeftArm,
    palindromeRightArm, complementedPalindromeRightArm,

    head, tb, tb.width, tail, patternFrequency, PDict,
    matchPDict, countPDict, whichPDict, vcountPDict
)


### ==========================================================================
### STRING ALIGNMENT
### --------------------------------------------------------------------------
###   XStringPartialMatches-class.R
###   XStringQuality-class.R
###   QualityScaledXStringSet.R
###   InDel-class.R
###   AlignedXStringSet-class.R
###   PairwiseAlignedXStringSet-class.R
###   PairwiseAlignedFixedSubject-class.R
###   align-utils.R
###   pmatchPattern.R
###   pairwiseAlignment.R
###   stringDist.R
###   needwunsQS.R

exportClasses(
    XStringPartialMatches,
    XStringQuality, PhredQuality, SolexaQuality,
    QualityScaledXStringSet,
    QualityScaledBStringSet, QualityScaledDNAStringSet,
    QualityScaledRNAStringSet, QualityScaledAAStringSet,
    InDel,
    AlignedXStringSet0, AlignedXStringSet, QualityAlignedXStringSet,
    PairwiseAlignedXStringSet, PairwiseAlignedFixedSubject,
    PairwiseAlignedFixedSubjectSummary
)

export(
    ## XStringPartialMatches-class.R:
    subpatterns, pattern,

    ## XStringQuality-class.R:
    PhredQuality, SolexaQuality,

    ## QualityScaledXStringSet.R:
    quality,
    QualityScaledBStringSet, QualityScaledDNAStringSet,
    QualityScaledRNAStringSet, QualityScaledAAStringSet,

    ## InDel-class.R:
    insertion, deletion,

    ## AlignedXStringSet-class.R:
    unaligned, aligned, indel, nindel,

    ## PairwiseAlignedXStringSet-class.R:
    PairwiseAlignedXStringSet, type, pid,

    ## PairwiseAlignedFixedSubject-class.R:
    PairwiseAlignedFixedSubject,

    ## align-utils.R:
    nedit,
    mismatchTable, mismatchSummary,
    compareStrings,

    ## pmatchPattern.R:
    lcprefix, lcsuffix, pmatchPattern, lcsubstr,

    ## pairwiseAlignment.R:
    nucleotideSubstitutionMatrix,
    errorSubstitutionMatrices,
    qualitySubstitutionMatrices,
    pairwiseAlignment,

    ## stringDist.R:
    stringDist,

    ## Old stuff (Defunct or Deprecated):
    alignScore, needwunsQS
)

exportMethods(
    initialize, length, "[", rep,
    coerce, as.integer, as.numeric, as.character, as.matrix, toString,
    show, summary,
    start, end, width,
    Views,
    subpatterns, pattern,
    quality,
    insertion, deletion,
    unaligned, aligned, indel, nindel,
    type, score, pid,
    PairwiseAlignedXStringSet, PairwiseAlignedFixedSubject,
    mismatch, nmatch, nmismatch, nedit,
    mismatchTable, mismatchSummary, coverage,
    compareStrings,
    lcprefix, lcsuffix, pmatchPattern, lcsubstr,
    pairwiseAlignment, stringDist,

    ## Old stuff (Defunct or Deprecated):
    needwunsQS
)


### ==========================================================================
### STUFF THAT BELONGED ORIGINALLY TO OLD matchprobes PACKAGE AND IS NOW
### SUPERSEDED BY SOME NATIVE Biostrings FUNCTIONALITY
### --------------------------------------------------------------------------
###   matchprobes.R

export(
    ## Used in ecolitk, arrayQualityMetrics (vignette only),
    ## Ringo (just mentioned in a \seealso section),
    ## ITALICS and tilingArray (in a Sweave document only).
    ## (makePlatformDesign and oligo define their own basecontent)
    basecontent,

    countbases,
    complementSeq,
    reverseSeq,
    revcompDNA,
    revcompRNA,
    longestConsecutive,
    matchprobes
)

