useDynLib(GenomicRanges)

import(methods)
import(utils)  # for as.roman()
importFrom(stats, setNames)
import(BiocGenerics)
import(S4Vectors)
import(IRanges)
import(GenomeInfoDb)
import(XVector)  # only for the "Views" method for integer vectors, the
                 # XIntegerViews class, and the "viewMins", "viewMaxs", and
                 # "viewSums" methods for XIntegerViews objects


### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
### Export S4 classes
###

exportClasses(
    Constraint, ConstraintORNULL,
    GenomicRanges, GenomicRangesORmissing, GRanges, DelegatingGenomicRanges,
    GNCList, GIntervalTree,
    GenomicRangesORGRangesList, GRangesList,
    SummarizedExperiment, Assays, ShallowData, ShallowSimpleListAssays,
    GenomicRangesList, SimpleGenomicRangesList
)


### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
### Export S3 methods
###

S3method(duplicated, GenomicRanges)

S3method(sort, GenomicRanges)

### We also export them thru the export() directive so that (a) they can be
### called directly, (b) tab-completion on the name of the generic shows them,
### and (c) methods() doesn't asterisk them.
export(
    duplicated.GenomicRanges,

    sort.GenomicRanges
)



### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
### Export S4 methods for generics not defined in GenomicRanges
###

exportMethods(
    length,
    names, "names<-",
    "dimnames<-",
    "[", "[<-", "[[", "[[<-", "$", "$<-",
    as.character, as.factor, as.data.frame,
    coerce,
    c,
    cbind,
    rbind,
    show,
    duplicated, match,
    order, sort, rank,
    union, intersect, setdiff,
    start, "start<-", end, "end<-", width, "width<-",
    split, unlist,
    range,
    Ops,
    merge,
    updateObject,
    strand, "strand<-",

    ## Generics defined in IRanges:
    elementMetadata, "elementMetadata<-",
    mcols, "mcols<-",
    values, "values<-",
    relistToClass,
    compare,
    ranges, "ranges<-",
    ngap,
    score, "score<-",
    shift, narrow, resize, flank, promoters, restrict, trim,
    reduce, gaps, disjoin, isDisjoint, disjointBins,
    coverage,
    punion, pintersect, psetdiff, pgap,
    findOverlaps, countOverlaps, overlapsAny, subsetByOverlaps,
    precede, follow, nearest, distance, distanceToNearest,
    mapCoords, pmapCoords,
    tile,
    subset,
    subjectHits, queryHits,

    ## Generics defined in GenomeInfoDb:
    seqinfo, "seqinfo<-",
    seqnames, "seqnames<-"
)


### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
### Export non-generic functions
###

export(
    phicoef,

    GRanges, .DollarNames.GenomicRanges,
    GNCList, GIntervalTree,
    GenomicRangesList, GRangesList,

    makeGRangesFromDataFrame,
    makeGRangesListFromFeatureFragments,

    isSmallGenome, absoluteRanges, relativeRanges,
    tileGenome,
    bindAsGRanges, mcolAsRleList, binnedAverage,

    rowData, "rowData<-",

    .DollarNames.SummarizedExperiment
)


### - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
### Export S4 generics defined in GenomicRanges + export corresponding
### methods
###

export(
    ## constraint.R:
    #constraint, "constraint<-",
    checkConstraint,

    ## range-squeezers.R:
    granges, grglist, rglist,

    ## SummarizedExperiment-class.R:
    SummarizedExperiment,
    exptData, "exptData<-",
    rowRanges, "rowRanges<-",
    colData, "colData<-",
    assays, "assays<-",
    assay, "assay<-",
    assayNames, "assayNames<-"
)

### Exactly the same list as above.
exportMethods(
    #constraint, "constraint<-",
    checkConstraint,
    granges, grglist, rglist,
    SummarizedExperiment,
    exptData, "exptData<-",
    rowRanges, "rowRanges<-",
    colData, "colData<-",
    assays, "assays<-",
    assay, "assay<-",
    assayNames, "assayNames<-"
)

