/** 
* @file Kernel.h
* @brief Interface for Mercer Kernels
* @author Erik Rodner
* @date 10/24/2007

*/
#ifndef KERNELINCLUDE
#define KERNELINCLUDE

#include "core/vector/VectorT.h"
#include "core/vector/MatrixT.h"

#include "core/vector/VVector.h"
  
/** Interface for Mercer Kernels */

namespace OBJREC {

class Kernel
{
    protected:
	bool symmetric;

    public:
  
	/** simple constructor */
	Kernel( bool symmetric );
      
	/** simple destructor */
	virtual ~Kernel();

	virtual double K (const NICE::Vector & x, const NICE::Vector & y) const = 0;

	void calcGramMatrix ( const NICE::VVector & vecSet, NICE::Matrix & G ) const;
	void calcKernelVector ( const NICE::VVector & vecSet, const NICE::Vector & y, NICE::Vector & kstar ) const;
     
};


} // namespace

#endif
