/** 
* @file Feature.cpp
* @brief abstraction of a feature
* @author Erik Rodner
* @date 04/21/2008

*/
#ifdef NOVISUAL
#include <vislearning/nice_nonvis.h>
#else
#include <vislearning/nice.h>
#endif

#include <iostream>

#include "Feature.h"
#include "FeaturePool.h"

using namespace OBJREC;

using namespace std;
// refactor-nice.pl: check this substitution
// old: using namespace ice;
using namespace NICE;



Feature::Feature()
{
}

Feature::~Feature()
{
}

void Feature::calcFeatureValues ( const Examples & examples,
				    vector<int> & examples_selection,
				    FeatureValues & values ) const
{
    for ( vector<int>::const_iterator si = examples_selection.begin();
				   si != examples_selection.end();
				   si++ )
    {
	int index = *si;
	const pair<int, Example> & p = examples[index];
	int classno = p.first;
	const Example & ce = p.second;
	double value = val ( &ce );
	values.insert ( quadruplet<double, int, int,double> ( value, classno, index, ce.weight ) );
    }
}

void Feature::calcFeatureValues ( const Examples & examples,
				    vector<int> & examples_selection,
				    FeatureValuesUnsorted & values ) const
{
    for ( vector<int>::const_iterator si = examples_selection.begin();
				   si != examples_selection.end();
				   si++ )
    {
	int index = *si;
	const pair<int, Example> & p = examples[index];
	int classno = p.first;
	const Example & ce = p.second;
	double value = val ( &ce );
	values.push_back ( quadruplet<double, int, int, double> ( value, classno, index, ce.weight ) );
    }
}