#ifndef _TREEINTERP_H_
#define _TREEINTERP_H_

#if defined(__cplusplus)
extern "C" {
#endif

typedef struct {
 float v1x, v1y, v2x, v2y;  /* coordenadas dos vertices do segmento de reta */
 float dx, dy, compr2;      /* campos privados. Estes campos são preenchidos pelo algoritmo. */
 float tol;
 float minx, maxx, miny, maxy;
 float aux;
 unsigned char valido;
} TreeInterpLinha;

/*
 * Prototipo da funcao de restricao adicional sobre a interpretacao F.
 */
typedef int (* PFNRESTRICAOPROC) (int nlinhas, TreeInterpLinha *linha, unsigned char *F);

/* Função de interpretação baseada em árvore.
 Parâmetros:
  - nlinhas_mdl : número de linhas do modelo;
  - linha_mdl : vetor de linhas do modelo;
  - nlinhas : número de linhas a serem interpretadas;
  - linha : vetor de linhas a serem interpretadas;
  - restricao_function : restrição adicional (admite = NULL);
  - res : vetor de dimensao "nlinhas" que sera' preenchido com o resultado da interpretação.
         res(i)=j significa que a linha i corresponde a linha j do modelo (j=255 significa 
                  linha sem correspondencia no modelo). A funcao espera que esta area 
                  ja' esteja alocada.
*/

void TreeInterpretation(int nlinhas_mdl, TreeInterpLinha *linha_mdl,
                        int nlinhas, TreeInterpLinha *linha, 
                        PFNRESTRICAOPROC restricao_function, unsigned char *res);

#if defined(__cplusplus)
}
#endif

#endif
