#include "text/ngrams.h"
#include "text/utf8.h"

using namespace std;


NgramSplitter::NgramSplitter(size_t size) : m_size(size)
{
}

void NgramSplitter::addWordsListener(WordsListener listener)
{
	m_wordsNotifier.addListener(listener);
}

bool NgramSplitter::removeWordsListener(WordsListener listener)
{
	return m_wordsNotifier.removeListener(listener);
}

void NgramSplitter::pushWord(const Word &word)
{
	const size_t wordSize = Utf8::size(word.text);

	if (wordSize >= m_size)
	{
		Utf8::iterator beg(word.text);
		Utf8::iterator end = beg;
		end += m_size;

		float time = word.time;
		const float delta = word.duration / (float) wordSize;
		const float duration = delta * (float) m_size;

		while (true)
		{
			m_wordsNotifier.notify(
					Word(Utf8::substr(beg, end), time, duration, word.score));

			if (!*end)
				break;

			++beg;
			++end;
			time += delta;
		}
	}
}