/** 
* @file CodebookPrototypes.h
* @brief feature CodebookPrototypes
* @author Erik Rodner
* @date 02/15/2008

*/
#ifndef CodebookPrototypesINCLUDE
#define CodebookPrototypesINCLUDE

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


#include <string>

#include "core/vector/VVector.h"
#include "Codebook.h"


namespace OBJREC {

/** feature CodebookPrototypes */
class CodebookPrototypes : public Codebook, public NICE::VVector
{

    protected:

    public:
  
	/** simple constructor */
	CodebookPrototypes();
	
	CodebookPrototypes( const std::string & filename );
	
	CodebookPrototypes( const NICE::VVector & vv );
	
	CodebookPrototypes( const CodebookPrototypes *cs );
      
	/** simple destructor */
	virtual ~CodebookPrototypes();
    
	void vote ( const NICE::Vector & feature, int & codebookEntry, double & weight, double & distance ) const;
	void add ( const Codebook *codebook );
	void copy ( const Codebook *codebook );
	Codebook *clone () const;

	void clear ();
	void restore ( std::istream & is, int format );
	void store ( std::ostream & os, int format ) const;

	void displayCodebook (int xsize, int ysize) const;
};


} // namespace

#endif