/** 
* @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();
    
	const ClassNames & getClassNames ( const std::string & key ) const;
	
	const LabeledSet * operator[] ( const std::string & key ) const;

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

};


} // namespace

#endif