#ifndef CLUSTER_LOGGER_HH
# define CLUSTER_LOGGER_HH

# include "classifiers/AbstractClassifier.hh"

# include "DataLogWriter.h"
# include "DoubleData.h"
# include "IntegerData.h"

# include <vector>

# define ClusterLogName "cluster"

/** @brief cluster log data file
 *
 * This class provide an entry point to log classification results on a file
 */
class ClusterLogger :public DataLogWriter {
public:
  ClusterLogger(DataLog::FileFormat format);
  ~ClusterLogger();

  void addClassifier(AbstractClassifier const &classifier);

private:
  void setFields();

  class Entry {
  public:
    Entry(AbstractClassifier const &classifier, 
	  DataLogWriter &out, Entry *nxt);
    ~Entry();

    void update();
    
  private:
    AbstractClassifier const &m_cls;

    IntegerData m_best;
    DoubleData m_dist;
    
    Entry *m_next;
  }; // ClusterLogger::Entry

  Entry *m_entries;

}; // ClusterLogger


#endif // CLUSTER_LOGGER_HH
