/** 
* @file MultipleKernelData.h
* @author Erik Rodner
* @date 01/19/2010

*/
#ifndef _NICE_OBJREC_MULTIPLEKERNELDATAINCLUDE
#define _NICE_OBJREC_MULTIPLEKERNELDATAINCLUDE

#include <string>

#include "KernelData.h"

namespace OBJREC {
  
/** @class MultipleKernelData
 * caching multiple kernel data objects
 *
 * @author Erik Rodner
 */
class MultipleKernelData : public KernelData
{
    protected:
		std::vector<KernelData *> multipleKernelData;

    public:
		/** copy constructor */
		MultipleKernelData ( const MultipleKernelData & src );

		/** simple constructor */
		MultipleKernelData( const NICE::Config *conf, const std::string & section = "Kernel" );
		
		MultipleKernelData( const NICE::Config *conf, const NICE::Matrix & kernelMatrix, const std::string & section = "Kernel" );
		  
		/** simple destructor, does not delete all inner kernel data objects ! */
		virtual ~MultipleKernelData();

		std::vector<KernelData *> & kernelData() { return multipleKernelData; };
		const KernelData* getSingleKernelData( uint i ) const;

		/** delete all inner kernel data objects */
		void destroy (void);

		MultipleKernelData *clone(void) const;
};

}

#endif
