#ifndef _CC_H_
#define _CC_H_

enum {
  ccTA_2, ccTC_2, D50_2, D55_2, D65_2, D75_2, F2_2, F7_2, F11_2,
  ccTA_10, ccTC_10, D50_10, D55_10, D65_10, D75_10, F2_10, F7_10, F11_10,
  ccNTristimulus
};

enum { ccX, ccY, ccZ};

/*
 *	Function Headers
 */

namespace OBJREC {

class ColorConversion
{
     private:
          static double ccmin(double val1, double val2, double val3);
          static double ccmax(double val1, double val2, double val3);
          static double Hue_2_RGB( double v1, double v2, double vH );
          static double degree_2_radian(double val);
        
     public:
          
static int ccXYZtoRGB(double x, double y, double z, double* r, double* g, double* b, char ObsIll); //

static int ccRGBtoXYZ(double r, double g, double b, double* x, double* y, double* z, char ObsIll); //

static int ccXYZtoYxy(double x, double y, double z, double* rY, double* rx, double* ry);//

static int ccXYZtoLMS(double x, double y, double z, double* l, double* m, double* s);//

static int ccLMStoOPP(double l, double m, double s, double* lum, double* lm, double* slm);//

static int ccYxytoXYZ(double Y, double x, double y, double* rx, double* ry, double* rz);//

static int ccXYZtoHunterLab(double x, double y, double z, double* L, double* a, double* b); //

static int ccHunterLabtoXYZ(double L, double a, double b, double* x, double* y, double* z); //

static int ccXYZtoCIE_Lab(double x, double y, double z, double* L, double* a, double* b, char ObsIll); //

static int ccCIE_LabtoXYZ(double L, double a, double b, double* x, double* y, double* z, char ObsIll); //

static int ccCIE_LabtoCIE_LCH(double L, double a, double b, double* rL, double* rC, double* rH);

static int ccCIE_LCHtoCIE_Lab(double L, double C, double H, double* rL, double* ra, double* rb);

static int ccXYZtoCIE_Luv(double x, double y, double z, double* L, double* u, double* v, char ObsIll);

static int ccCIE_LuvtoXYZ(double L, double u, double v, double* x, double* y, double* z, char ObsIll);

static int ccRGBtoHSL(double L, double a, double b, double* h, double* s, double* l); //

static int ccHSLtoRGB(double h, double s, double l, double* r, double* g, double* b); //

static int ccRGBtoHSV(double r, double g, double b, double* h, double* s, double* v); //

static int ccHSVtoRGB(double h, double s, double v, double* r, double* g, double* b); //

static int ccfRGBtoCMY(double r, double g, double b, double* c, double* m, double* y); //

static int cciRGBtoCMY(int r, int g, int b, double* c, double* m, double* y); //

static int ccCMYtofRGB(double c, double m, double y, double* r, double* g, double* b); //

static int ccCMYtoiRGB(double c, double m, double y, int* r, int* g, int* b); //

static int ccCMYtoCMYK(double c, double m, double y, double* C, double* M, double* Y, double* K); //

static int ccCMYKtoCMY(double c, double m, double y, double k, double* C, double* M, double* Y); //

static int ccFixRGB(double* r, double* g, double* b);

};

} // namespace

#endif
