/**
* @file RegressionAlgorithm.h
* @brief interface for a regression algorithm
* @author Erik Rodner
* @date 12/09/2009

*/
#ifndef REGRESSIONALGORITHMINCLUDE
#define REGRESSIONALGORITHMINCLUDE

#include "core/vector/VVector.h"

namespace OBJREC
{

#define ROADWORKS fthrow(NICE::Exception, "Persistent Interface: not yet implemented.");

/** interface for a regression algorithm */
class RegressionAlgorithm : public NICE::Persistent
{

  protected:

  public:

    /** simple constructor */
    RegressionAlgorithm();

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

    /** learn parameters/models/whatever using a set of vectors and
     *  their corresponding function values
     */
    virtual void teach ( const NICE::VVector & x, const NICE::Vector & y ) = 0;

    /** predict the function value for \c x */
    virtual double predict ( const NICE::Vector & x ) = 0;

    /** persistent interface */
    virtual void restore ( std::istream & is, int format = 0 )
    {
      ROADWORKS
    };
    virtual void store ( std::ostream & os, int format = 0 ) const
    {
      ROADWORKS
    };
    virtual void clear ()
    {
      ROADWORKS
    };

    /** clone function */
    virtual RegressionAlgorithm *clone ( void ) const
    {
      fthrow ( NICE::Exception, "clone() not yet implemented!\n" );
    }

};

#undef ROADWORKS

}

#endif
