/** 
* @file Codebook.cpp
* @brief feature codebook
* @author Erik Rodner
* @date 02/15/2008

*/
#include <iostream>

#include "vislearning/features/simplefeatures/Codebook.h"

using namespace OBJREC;

using namespace std;
using namespace NICE;

void Codebook::vote ( const NICE::Vector & feature, 
			NICE::Vector & histogram, 
			int & codebookEntry,
			double & weight,
			double & distance ) const
{
    vote ( feature, codebookEntry, weight, distance );
    histogram[codebookEntry] += weight;
}

void Codebook::vote ( const NICE::Vector & feature, SparseVector & votes ) const
{
    int codebookEntry;
    double weight;
    double distance;
    vote ( feature, codebookEntry, weight, distance );
    votes.insert ( votes.begin(), pair<int, double> ( codebookEntry, weight ) );
}
	
void Codebook::reinit ( int numCodebookEntries )
{
    thresholds.resize ( numCodebookEntries );
	thresholds.set(0.0);
    informativeMeasure.resize ( numCodebookEntries );
	informativeMeasure.set(0.0);
    classnos.resize ( numCodebookEntries );
	classnos.resize(0);
}

void Codebook::clear ()
{
    thresholds.clear();
    informativeMeasure.clear();
    classnos.clear();
}

void Codebook::restore ( istream & is, int format )
{
   is >> thresholds;
   is >> informativeMeasure;
   is >> classnos;
}

void Codebook::store ( ostream & os, int format ) const
{
    os << thresholds << endl;
    os << informativeMeasure << endl;
    os << classnos << endl;
}

void Codebook::copy ( const Codebook *codebook )
{
    reinit ( codebook->thresholds.size() );
    thresholds = codebook->thresholds;
    informativeMeasure = codebook->informativeMeasure;
    classnos = codebook->classnos;
}