#pragma once
#include <mkl_types.h>

#ifdef MKLSERVICE_EXPORTS
#define MKLSERVICE_API __declspec(dllexport) 
#else
#define MKLSERVICE_API __declspec(dllimport) 
#endif

namespace Monitel
{
	namespace MathNative
	{
		namespace MKLService
		{
			class MKLSERVICE_API MKLServiceProvider
			{
			public:
				/// <summary>
				/// Установить режим для управления численной воспроизводимости результатов
				/// (Conditional Numerical Reproducibility Control (CNR))
				/// </summary>
				/// <param name="setting"></param>
				/// <returns></returns>
				static int SetCNRMode(int setting);
				/// <summary>
				/// Получить текущий режим для управления численной воспроизводимости результатов
				/// (Conditional Numerical Reproducibility Control (CNR))
				/// </summary>
				/// <param name="option"></param>
				/// <returns></returns>
				static int GetCNRMode(void);
				/// <summary>
				/// Получить режим для управления численной воспроизводимости результатов
				/// для текущей платформы
				/// </summary>
				/// <returns></returns>
				static int GetCNRModeAuto(void);
				/// <summary>
				/// Получить версию Intel MKL
				/// </summary>
				/// <param name="pVersion"></param>
				static void GetMKLVersion(MKLVersion* pVersion);
				/// <summary>
				/// Освободить неиспользуемую память, выделенную при помощи Intel MKL.
				/// Данную функцию следует вызывать после самого последнего вызова функций Intel MKL. 
				/// </summary>
				static void MKLFreeBuffers(void);

				MKLServiceProvider();

				~MKLServiceProvider();
			};
		}
	}
}


