/* LICENSE:
  =========================================================================
    CMPack'04 Source Code Release for OPEN-R SDK 1.1.5-r2 for ERS7
    Copyright (C) 2004 Multirobot Lab [Project Head: Manuela Veloso]
    School of Computer Science, Carnegie Mellon University
    All rights reserved.
  ========================================================================= */

#ifndef __KERNREG_H__
#define __KERNREG_H__

#include "agent/Vision/colors.h"
#include "learn.h"
#include "bsptree.h"

class TMap{
public:
  int size;
  int size_y,size_u,size_v;
  int div_y,div_u,div_v;
  uchar *tmap;

public:
  TMap() {tmap=NULL;}
  ~TMap() {delete[](tmap); tmap=NULL;}
  bool init(int sy,int su,int sv);

  int loc(int y,int u,int v)
    {return(((y/div_y)*size_u + u/div_u)*size_v + v/div_v);}
  int box_loc(int y_box, int u_box, int v_box)
    {return ((y_box*size_u + u_box)*size_v + v_box);}
#ifdef USE_AMBIGUOUS
  uchar classify(int y,int u,int v)
    {return(tmap[loc(y,u,v)] & 0xFU);}
  uchar classify_subclass(int y,int u,int v)
    {return(tmap[loc(y,u,v)] >> 4);}
#else
  uchar classify(int y,int u,int v)
    {return(tmap[loc(y,u,v)]);}
#endif
  void clear(uchar val = 0)
    {memset(tmap,val,size);}
};

class KernelRegLearner{
public:
  BSPTree<example,float,3> tree;
public:
  void addList(example *e);
  void build();

  void learn(TMap &tmap,color_info *colors,int num);
};

#endif
