#include "macros.h"
#include <opencv2/core.hpp>

#ifndef __FF_MATTYPES_H__
#define __FF_MATTYPES_H__

#define FF_MAT_TYPE(CONST) \
  module->Set(Nan::New<v8::String>(#CONST).ToLocalChecked(), Nan::New<v8::Integer>(CONST));

static void initMatTypes(v8::Local<v8::Object> module) {
	FF_MAT_TYPE(CV_8U);
	FF_MAT_TYPE(CV_8S);
	FF_MAT_TYPE(CV_16U);
	FF_MAT_TYPE(CV_16S);
	FF_MAT_TYPE(CV_32S);
	FF_MAT_TYPE(CV_32F);
	FF_MAT_TYPE(CV_64F);

	FF_MAT_TYPE(CV_8UC1);
	FF_MAT_TYPE(CV_8UC2);
	FF_MAT_TYPE(CV_8UC3);
	FF_MAT_TYPE(CV_8UC4);

	FF_MAT_TYPE(CV_8SC1);
	FF_MAT_TYPE(CV_8SC2);
	FF_MAT_TYPE(CV_8SC3);
	FF_MAT_TYPE(CV_8SC4);

	FF_MAT_TYPE(CV_16UC1);
	FF_MAT_TYPE(CV_16UC2);
	FF_MAT_TYPE(CV_16UC3);
	FF_MAT_TYPE(CV_16UC4);

	FF_MAT_TYPE(CV_16SC1);
	FF_MAT_TYPE(CV_16SC2);
	FF_MAT_TYPE(CV_16SC3);
	FF_MAT_TYPE(CV_16SC4);

	FF_MAT_TYPE(CV_32SC1);
	FF_MAT_TYPE(CV_32SC2);
	FF_MAT_TYPE(CV_32SC3);
	FF_MAT_TYPE(CV_32SC4);

	FF_MAT_TYPE(CV_32FC1);
	FF_MAT_TYPE(CV_32FC2);
	FF_MAT_TYPE(CV_32FC3);
	FF_MAT_TYPE(CV_32FC4);

	FF_MAT_TYPE(CV_64FC1);
	FF_MAT_TYPE(CV_64FC2);
	FF_MAT_TYPE(CV_64FC3);
	FF_MAT_TYPE(CV_64FC4);
}

#endif