// implementation file: Expander.cpp
// description:         Coding by expansion. Compression is hard work, so expansion is used instead.
// author:              Karlheinz Hug
// creation date:       2012-07-05
// last update:         2012-07-10

#include "Expander.hpp"

	void Expander::encode (const std::vector<char> & source_buffer, std::vector<char> & target_buffer)
	{
		target_buffer.resize(2 * source_buffer.size());
		for (unsigned int i = 0; i < source_buffer.size(); ++i)
		{
			target_buffer.at(2 * i) =
			target_buffer.at(2 * i + 1) = source_buffer.at(i);
		}
	}

	void Expander::decode (const std::vector<char> & source_buffer, std::vector<char> & target_buffer)
	{
		if (source_buffer.size() % 2 != 0)
		{
			a_result = failed_decode;
			return;
		}
		target_buffer.resize(source_buffer.size() / 2);
		for (unsigned int i = 0; i < target_buffer.size(); ++i)
		{
			if (source_buffer.at(2 * i) != source_buffer.at(2 * i + 1))
			{
				a_result = failed_decode;
				return;
			}
			target_buffer.at(i) = source_buffer.at(2 * i);
		}
	}
