useDynLib(datatable, .registration=TRUE)

## For S4-ization
import(methods)
exportClasses(data.table, IDate, ITime)
##

export(data.table, tables, setkey, setkeyv, key, "key<-", haskey, CJ, SJ, copy)
export(set2key, set2keyv, key2, setindex, setindexv, indices)
export(as.data.table,is.data.table,test.data.table,last,first,like,"%like%",between,"%between%",inrange,"%inrange%")
export(timetaken)
export(truelength, alloc.col, ":=")
export(setattr, setnames, setcolorder, set, setDT, setDF)
export(setorder, setorderv)
export(setNumericRounding, getNumericRounding)
export(chmatch, "%chin%", chorder, chgroup)
export(rbindlist)
export(fread)
export(fwrite)
export(foverlaps)
export(shift)
export(transpose)
export(tstrsplit)
export(frank)
export(frankv)
export(address)
export(.SD,.N,.I,.GRP,.BY,.EACHI)
export(rleid)
export(rleidv)
export(rowid)
export(rowidv)
export(as.xts.data.table)
export(uniqueN)
export(setDTthreads, getDTthreads)
# set operators
export(fintersect)
export(fsetdiff)
export(funion)
export(fsetequal)
S3method(all.equal, data.table)
export(shouldPrint)
export(fsort)  # experimental parallel sort for vector type double only, currently

S3method("[", data.table)
S3method("[<-", data.table)
# S3method("[[", data.table)
# S3method("[[<-", data.table)
S3method("$<-", data.table)
S3method(print, data.table)
S3method(as.data.table, data.table)
S3method(as.data.table, data.frame)
S3method(as.data.table, matrix)
S3method(as.data.table, list)
S3method(as.data.table, integer)
S3method(as.data.table, numeric)
S3method(as.data.table, character)
S3method(as.data.table, logical)
S3method(as.data.table, factor)
S3method(as.data.table, ordered)
S3method(as.data.table, Date)
S3method(as.data.table, ITime)
S3method(as.data.table, table)
S3method(as.data.table, xts)
S3method(as.data.table, default)
S3method(as.data.frame, data.table)
S3method(as.list, data.table)
S3method(as.matrix, data.table)
#S3method(cbind, data.table)
#S3method(rbind, data.table)
export(.rbind.data.table)
S3method(split, data.table)
S3method(dim, data.table)
S3method(dimnames, data.table)
S3method("dimnames<-", data.table)
S3method("names<-", data.table)
S3method(duplicated, data.table)
S3method(unique, data.table)
S3method(merge, data.table)
S3method(subset, data.table)
S3method(transform, data.table)
S3method(within, data.table)
S3method(is.na, data.table)
S3method(format, data.table)
S3method(Ops, data.table)

S3method(anyDuplicated, data.table)

export(melt)
export(melt.data.table)
S3method(melt, data.table)
export(dcast)
export(dcast.data.table)
S3method(dcast, data.table)

import(utils)
S3method(tail, data.table)
S3method(head, data.table)
import(stats)
S3method(na.omit, data.table)

# IDateTime support:
export(as.IDate,as.ITime,IDateTime)
export(second,minute,hour,yday,wday,mday,week,isoweek,month,quarter,year)

export(as.chron.IDate, as.chron.ITime)
export(as.Date.IDate) # workaround for zoo bug, see #1500

S3method("[", ITime)
S3method("+", IDate)
S3method("-", IDate)
S3method(as.character, ITime)
S3method(as.data.frame, ITime)
S3method(as.Date, IDate)
S3method(as.IDate, Date)
S3method(as.IDate, default)
S3method(as.ITime, character)
S3method(as.ITime, default)
S3method(as.ITime, POSIXlt)
S3method(as.ITime, times)
S3method(as.list, IDate)
S3method(as.POSIXct, IDate)
S3method(as.POSIXct, ITime)
S3method(as.POSIXlt, ITime)
S3method(c, IDate)
S3method(cut, IDate)
S3method(format, ITime)
S3method(IDateTime, default)
S3method(mean, IDate)
S3method(print, ITime)
S3method(rep, IDate)
S3method(rep, ITime)
S3method(round, IDate)
S3method(seq, IDate)
S3method(split, IDate)
S3method(unique, IDate)
S3method(unique, ITime)



# [.factor
# c.factor
# duplist
# getdots
# NCOL
# NROW
# take
# trim
# which.first
# which.last

