/*
    Copyright (C) 2012 Bartosz Broda, Jacek Bochenek, Łukasz Biłeńkij, 
    Damian Jaworski, Wojciech Mazur, Dominik Piasecki, Maciej Piasecki, 
    Radosław Ramocki
    
    This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.

    This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. 

    See the LICENSE and COPYING files for more details.
*/

#ifndef SMARTCOMPARATOR_TRANSFORMATIONS_H
#define SMARTCOMPARATOR_TRANSFORMATIONS_H
#include "../comparator_stdheaders.h"

namespace smartcomparator
{
	namespace transformations
	{
		/**
		 * Interface for all transformations.
		 */
		class Transformation
		{
			public:
				/**
				 * \param matrix Matrix to transform.
				 */
				Transformation ( Matrices::SuperMatrixPtr pMatrix );

				/**
				 * The method should transform matrix given in c-tor.
				 */
				virtual void TransformMatrix() = 0;

				virtual ~Transformation();

			protected:

				///Matrix to transform.

				Matrices::SuperMatrixPtr m_pMatrix;

		};

		typedef boost::shared_ptr<Transformation> TransformationPtr;
	}//namespace transformations
}//namespace smartcomparator

#endif //SMARTCOMPARATOR_TRANSFORMATIONS_H

