//
//  plumb_line_types.h
//  plumb_line_types
//
//  Created by Mehdi Stapleton on 2015-05-18.
//
//

#ifndef __plumb_line_types__
#define __plumb_line_types__

//Standard libraries
#include <assert.h>


//---------------------------------------------------------------
//             GENERAL PREPROCESSOR DEFINITIONS
//---------------------------------------------------------------


//---------------------------------------------------------------
//                      TYPE DEFINITIONS
//---------------------------------------------------------------

typedef double   matrix_t;
typedef double   coef_t;
typedef double   vector_t;
typedef double   scalar_t;
typedef uint32_t index_t;
typedef uint32_t count_t;

/*important for lsqnonlin: coefficients for distortion center 
  should be at end of enumeration
 */

typedef enum {
     STD_COEF_K1 = 0
    ,STD_COEF_K2
    ,STD_COEF_P1
    ,STD_COEF_P2
    ,STD_COEF_Q1
    ,STD_COEF_Q2
    ,STD_COEF_CX
    ,STD_COEF_CY
    ,STD_NCOEFS
} StdCoefIdx;

typedef enum {
     FOV_COEF_W = 0
    ,FOV_COEF_K2
    ,FOV_COEF_K3
    ,FOV_COEF_CX
    ,FOV_COEF_CY
    ,FOV_NCOEFS
} FovCoefIdx;

typedef enum {
    RAD_COEF_K0 = 0
    ,RAD_COEF_K1
    ,RAD_COEF_K2
    ,RAD_COEF_K3
    ,RAD_COEF_K4
    ,RAD_COEF_CX
    ,RAD_COEF_CY
    ,RAD_NCOEFS
} RadialCoefIdx;

typedef enum {
     METHOD_STD = 0
    ,METHOD_BLIND
    ,METHOD_NTYPES
} MethodType;


#endif /* defined(__plumb_line_types__) */
