#include "ProgressiveProcessor.h"

ProgressiveProcessor::ProgressiveProcessor()
{
	tempFile[0]=0;
	writeCursor=INVALID_HANDLE_VALUE;

	wchar_t tempPath[MAX_PATH-14] = {0};
	GetTempPath(MAX_PATH-14, tempPath);
	GetTempFileName(tempPath, L"wfv", 0, tempFile);

	writeCursor=CreateFile(tempFile, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);
	processedCursor=CreateFile(tempFile, GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
	readCursor=CreateFile(tempFile, GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
}

ProgressiveProcessor::~ProgressiveProcessor()
{
	if (writeCursor != INVALID_HANDLE_VALUE)
		CloseHandle(writeCursor);

	if (tempFile[0])
		DeleteFile(tempFile);
}

int ProgressiveProcessor::Write(void *data, size_t datalen, size_t *written)
{
	DWORD dw_written=0;
	WriteFile(writeCursor, data, (DWORD)datalen, &dw_written, NULL);
	*written=dw_written;
	writePosition+=dw_written;

	return 0;
}