#pragma once
using namespace System;


namespace lkfxdok {
	namespace c {

		ref class LKFDataProvider;
		ref class LKFSemaphoreHandler;
		ref class LKFMemoryDelegate;

		public ref class LKFController
		{
			static String ^_path;
			static LKFDataProvider ^_dataProvider;
		private:
			static LKFSemaphoreHandler ^_metaDataSemaphoreHandler;

		public:
			static property String ^Version {
				String ^get(void);
			}

			static property String ^DataPath {
				String ^get(void);
				void set(String ^path);
			}

			static property unsigned int ModelljahrMinimum {
				unsigned int get(void);
			}

			static property unsigned int ModelljahrMaximum {
				unsigned int get(void);
			}

			static property LKFDataProvider ^DataProvider {
				LKFDataProvider ^get(void);
				void set(LKFDataProvider ^dataProvider);
			}

			static void activateMetaDataSemaphore();
	
			static void enableMemoryTrace(void);

			static void setMemoryDelegate(LKFMemoryDelegate^ memoryDelegate);

			static void clearDebugMemoryCallback();
			static void setMemoryDebugLimit(long availableMemory, long usedMemory, String^ breakingKey, int count);

			static unsigned long long getDebugMemoryBytes(void);
			static unsigned long long getDebugMemoryBlocks(void);

		};
	}
}

