// sum.cpp : Defines the function for sum calculation
// input: 2 integer numbers separated by space
// output: 1 integer number
#define MODULE_EXPORTS
#include "ModuleIface.h"

#include <string>
using namespace std;

extern "C"{
	MODULE_API int calcfunc(const char* inputDataStr, CalcControl* control)
	{
		// use stl string for split input numbers
		string input(inputDataStr);
		size_t pos = input.find(" ");
		if (pos == input.npos) // check for valid input
			return 1;

		// convert string to int
		int a = atoi(input.substr(0,pos).c_str());
		int b = atoi(input.substr(pos+1,input.length()).c_str());
		int sum = a+b; // calculate sum

		if (control)// check if external function wants to interrupt calculations
			if (control->isInterrupted()) 
				return 2;

		///for test purpose -  emulate module hangup with interrupt check
		if (input == "-1 -1" && control)
		{
			while(!control->isInterrupted())
				Sleep(100);
			return 3;
		}
		//prepare output 
		char s_outputBuf[20];
		memset(s_outputBuf, 0, sizeof(s_outputBuf));
		sprintf_s(s_outputBuf, 20,"%d",sum);
		// set result
		int ret = control->setResult(s_outputBuf);
		if (ret !=0)
		{
			return 4; 
		}
		return 0;
	}
}


