useDynLib(IRanges)

import(methods)
importFrom(stats, "start", "end", "update")
importClassesFrom(Matrix, CsparseMatrix, nsparseMatrix, generalMatrix,
                  sparseMatrix, Matrix, nMatrix, compMatrix, ngCMatrix)
importFrom(Matrix, colSums)

exportClasses(
    characterORNULL,
    ListLike,
    Ranges, IRanges, NormalIRanges, XRanges, IntervalTree,
    SequencePtr, RawPtr, IntegerPtr, NumericPtr,
    Sequence, SequenceORvector, Views,
    XSequence, XRaw, XInteger, XIntegerViews, XNumeric,
    XRle, XRleInteger, XRleIntegerViews,
    MaskCollection,
    TypedList, RangesList, IRangesList,
    XDataFrame, SplitXDataFrame,
    RangedData, RangedDataList, FilterRules, RDApplyParams, GenomicData,
    RangesMatching
)

export(
    ## Non-generic functions:
    setValidity2, new2,
    isTRUEorFALSE, isSingleInteger, isSingleNumber, isSingleString,
    isSingleIntegerOrNA, isSingleNumberOrNA, isSingleStringOrNA,
    sapplyLength,
    safeExplode,
    IRanges,
    RangedData, RangedDataList,
    FilterRules, RDApplyParams,
    GenomicData,
    solveUserSEW,
    successiveIRanges,
    whichAsIRanges,
    asNormalIRanges,
    RangesList,
    IRangesList,
    MaskCollection.show_frame,
    Mask,
    read.gapMask,
    read.agpMask,
    read.liftMask,
    read.rmMask,
    read.trfMask,
    RawPtr, RawPtr.readInts, RawPtr.writeInts, RawPtr.read, RawPtr.write,
    RawPtr.copy, RawPtr.reverseCopy, RawPtr.readComplexes, RawPtr.append,
    RawPtr.compare,
    #IntegerPtr, IntegerPtr.read, IntegerPtr.write,
    #NumericPtr, NumericPtr.read, NumericPtr.write,
    XInteger, XNumeric, XDataFrame, SplitXDataFrame,
    XRleInteger,
    newViews, successiveViews,

    ## Generic functions in the ListLike API:
    sapply,

    ## Generic functions in the Ranges API:
    width,
    "start<-",
    "width<-",
    "end<-",
    isEmpty,
    shift,
    restrict,
    narrow,
    reduce,
    gaps,
    punion, pintersect, psetdiff,
    overlap,

    ## Other generic functions:
    isNormal,
    whichFirstNotNormal,
    strand,
    genome,
    IntervalTree,
    reverse,
    coverage,
    nir_list,
    active, "active<-",
    maskedwidth, maskedratio,
    ranges,
    subseq,
    subject, Views, subviews, trim,
    slice,
    values,
    viewMins, viewMaxs, viewSums,
    cbind, rbind,
    rangedData, "rangedData<-", applyFun, "applyFun<-", applyParams,
    "applyParams<-", simplify, "simplify<-",
    ##excludePattern, "excludePattern<-",
    filterRules, "filterRules<-",
    reducerFun, "reducerFun<-", reducerParams, "reducerParams<-",
    rdapply,
    annotation, genome, chrom,
    elements, elementClass,
    matchMatrix,
    
    ## Old stuff (Defunct or Deprecated):
    first, last,
    intToRanges, intToAdjacentRanges, toNormalIRanges,
    views
)

exportMethods(
    ## Methods for generics defined elsewhere:
    Arith,
    coerce,
    show,
    summary,
    length,
    names, "names<-",
    "[", "[<-", "[[", "[[<-", "$",
    duplicated,
    rep,
    start,
    end,
    max,
    min,
    as.list,
    as.vector,
    as.integer,
    as.data.frame,
    as.matrix,
    as.list,
    as.table,
    toString,
    unlist,
    update,
    append,
    "==", "!=",
    c,
    union, intersect, setdiff,
    split,
    eval,
    t,
    "%in%",
    
    ## Methods for generics defined in this package:
    lapply, sapply,
    width,
    "start<-",
    "width<-",
    "end<-",
    isEmpty,
    isNormal,
    whichFirstNotNormal,
    shift,
    restrict,
    narrow,
    reduce,
    gaps,
    punion, pintersect, psetdiff,
    reverse,
    coverage,
    nir_list,
    active, "active<-",
    desc, "desc<-",
    maskedwidth, maskedratio,
    subseq,
    subject, Views, subviews, trim,
    viewMins, viewMaxs, viewSums,

    ## Old stuff (Defunct or Deprecated):
    first, last
)
