/** 
* @file VecClassifier.h
* @brief Simple classification interface
* @author Erik Rodner
* @date 07.09.2007

*/
#ifndef VecClassifierINCLUDE
#define VecClassifierINCLUDE

#include "core/basics/Persistent.h"
#include "core/basics/Config.h"

#include "vislearning/cbaselib/LabeledSet.h"
#include "vislearning/cbaselib/ClassificationResult.h"

#define ROADWORKS fthrow(Exception, "clone(): not yet implemented!");

namespace OBJREC {

/** Simple classification interface */
class VecClassifier : public NICE::Persistent
{
    protected:
		int maxClassNo;

    public:
 
		VecClassifier() { maxClassNo = 0; };

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

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

		virtual void setMaxClassNo ( int maxClassNo );
		
		virtual int getMaxClassNo () const;

		/** classify using simple vector */
		virtual ClassificationResult classify ( const NICE::Vector & x ) const = 0;

		/** teach classifier with a labeled set of feature vectors */
		virtual void teach ( const LabeledSetVector & teachSet ) = 0;
		
		/** calculate classifier stuff as the last training step */
		virtual void finishTeaching() = 0;

		/** clone this object */
		virtual VecClassifier *clone(void) const { ROADWORKS; };
};

#undef ROADWORKS


} // namespace

#endif