useDynLib(stream)

import(methods)
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_Sample,
#  DSC_BIRCH,
	DSC_tNN, 
  DSC_DStream,

  DSC_Static,
  
  DSC_Kmeans,
	DSC_DBSCAN,
	DSC_Hierarchical,
  DSC_Reachability,
	
	# DSD
	DSD_Wrapper,
  DSD_ScaleStream,
  DSD_ReadStream,
  
  DSD_mlbenchGenerator,
	DSD_mlbenchData,
  
	DSD_Gaussians,
  DSD_Cubes,
	DSD_UniformNoise,
	DSD_Target,
  DSD_BarsAndGaussians,
  DSD_Benchmark,

  # MGCs
  DSD_MG,
  MGC_Linear,
  MGC_Function,
  MGC_Random,
  MGC_Noise,
  MGC_Static,
  MGC_Shape_Gaussian,
  MGC_Shape_Block,

  # functions
	# DSD
	get_points,
	write_stream,
	reset_stream,
	close_stream,
	scale_stream,

  add_keyframe,
  keyframe,
  remove_keyframe,
  get_keyframes,
  add_cluster,
  get_clusters,
  remove_cluster,
	
	# DSC
	cluster,
	recluster,
	get_centers,
	get_weights,
	get_assignment,
	get_copy,
	nclusters,
#	merge_DSC,
	prune_clusters,
	microToMacro,	
	
	evaluate,
	evaluate_cluster,
	
	animate_cluster,
	animate_data,
  
  ### DSC_tNN
  get_shared_density,
  ### DSC_DStream
  get_attraction,
  
  ### generics internally used
  get_microclusters,
  get_microweights,
  get_macroclusters,
  get_macroweights,
  .cluster
      )

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

S3method(get_points, DSD_Gaussians)
S3method(get_points, DSD_mlbenchGenerator)
S3method(get_points, DSD_BarsAndGaussians)
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(plot, DSC_DStream)

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(microToMacro, DSC_DStream)

S3method(get_copy, DSC_R)

S3method(print, stream_eval)

### DSD_MGC
S3method(add_cluster, DSD_MG)
S3method(reset_stream, DSD_MG)
S3method(get_points, DSD_MG)
S3method(get_clusters, DSD_MG)
S3method(print, DSD_MG)
S3method(remove_cluster, DSD_MG)
S3method(print, MGC)
S3method(print, MGC_Linear)
S3method(add_keyframe, MGC_Linear)
S3method(get_keyframes, MGC_Linear)
S3method(remove_keyframe, MGC_Linear)