useDynLib(stream)

import(methods)
import(rJava)
import(proxy)
import(birch) 
import(hash) 

importFrom(mlbench, "mlbench.2dnormals","mlbench.cassini","mlbench.circle",
    "mlbench.cuboids","mlbench.friedman1", "mlbench.friedman2",
    "mlbench.friedman3","mlbench.hypercube", "mlbench.peak",
    "mlbench.ringnorm", "mlbench.shapes","mlbench.simplex","mlbench.smiley",
    "mlbench.spirals","mlbench.threenorm", "mlbench.twonorm",
    "mlbench.waveform","mlbench.xor")

export(
	# DSC
	DSC_Static,
  DSC_Sample,
  DSC_BIRCH,
	DSC_tNN,  
  
  DSC_DenStream,
	DSC_CluStream,
	DSC_ClusTree,
	
  DSC_Kmeans,
	DSC_DBSCAN,
	DSC_Hierarchical,
	
	# DSD
	DSD_Wrapper,
  DSD_ScaleStream,
  DSD_ReadStream,
  
  DSD_mlbenchGenerator,
	DSD_mlbenchData,
  
  DSD_RandomRBFGeneratorEvents,
	DSD_GaussianStatic,
	DSD_GaussianMoving,
  DSD_Cubes,
	DSD_UniformNoise,
	DSD_Target,
  DSD_BarsAndGaussians,

  # functions
	# DSD
	get_points,
	write_stream,
	reset_stream,
	close_stream,
	scale_stream,
	
	# DSC
	cluster,
	recluster,
	get_centers,
	get_weights,
	get_assignment,
	get_copy,
	nclusters,
#	merge_DSC,
	prune_clusters,
	microToMacro,	
  serialize,
	
	evaluate,
	evaluate_cluster,
	
	animate_cluster,
	animate_data
      )

### DSD Methods
S3method(print, DSD)
S3method(print, DSD_Wrapper)
S3method(plot, DSD)
S3method(write_stream, DSD)

S3method(get_points, DSD_GaussianStatic)
##S3method(get_points, DSD_GaussianMoving)
S3method(get_points, DSD_mlbenchGenerator)
S3method(get_points, DSD_BarsAndGaussians)
S3method(get_points, DSD_MOA)
S3method(get_points, DSD_ReadStream)
S3method(get_points, DSD_Target)
S3method(get_points, DSD_Wrapper)
S3method(get_points, DSD_ScaleStream)

S3method(reset_stream, DSD)
S3method(reset_stream, DSD_Wrapper)
S3method(reset_stream, DSD_ReadStream)
S3method(reset_stream, DSD_ScaleStream)

### DSC Methods
S3method(plot, DSC)
S3method(plot, DSC_tNN)
S3method(print, DSC)
S3method(get_assignment, DSC)
S3method(nclusters, DSC)

S3method(get_centers, DSC_Macro)
S3method(get_centers, DSC_Micro)

S3method(get_weights, DSC_Micro)
S3method(get_weights, DSC_Macro)

S3method(recluster, DSC_Macro)

S3method(microToMacro, DSC_Hierarchical)
S3method(microToMacro, DSC_Kmeans)
S3method(microToMacro, DSC_DBSCAN)
S3method(microToMacro, DSC_tNN)

S3method(get_copy, DSC_R)
S3method(get_copy, DSC_MOA)

### other
S3method(print, stream_eval)
