/**
* @file MultiDataset.h
* @brief multiple datasets
* @author Erik Rodner
* @date 02/08/2008

*/
#ifndef MULTIDATASETINCLUDE
#define MULTIDATASETINCLUDE

#include <string>
#include <map>


#include <core/basics/Config.h>


#include "LabeledSetSelection.h"
#include "LabeledFileList.h"
#include "LabeledSet.h"
#include "ClassNames.h"


namespace OBJREC {

/** multiple datasets */
class MultiDataset
{

protected:
    LabeledFileList lfl;
    std::map<std::string, ClassNames> classnames;
    std::map<std::string, LabeledSet> datasets;

    void selectExamples ( const std::string & examples_command,
                          const LabeledSet & base,
                          LabeledSet & positives,
                          LabeledSet & negatives,
                          const ClassNames & cn ) const;

public:

    /** simple constructor */
    MultiDataset( const NICE::Config *conf );

    /** simple destructor */
    virtual ~MultiDataset();

    /** access class information, e.g., md.getClassNames("train") */
    const ClassNames & getClassNames ( const std::string & key ) const;

    /** access stored dataset by name, e.g., md["train"], if you have a [train] section
      * in your config file */
    const LabeledSet * operator[] ( const std::string & key ) const;

    const LabeledSet * at ( const std::string & key ) const;

};


} // namespace

#endif