// header file:   CoderFactory.hpp
// description:   Module as class with a static factory function for coder objects.
//                Design pattern: Factory function.
// variant:       1 simple
// author:        Karlheinz Hug
// creation date: 2012-07-05
// last update:   2012-08-06

#ifndef CODER_FACTORY_HPP_
#define CODER_FACTORY_HPP_

#include <string>

#include "Coder.hpp"

	class CoderFactory
	{
		public:
			static Coder * new_coder (char coder_type, const std::string & key);
				// Factory function for a coder described by 'coder_type'.
				// Values for 'coder_type':
				//    'e' : Expander
				//    'c' : Caesar
				//    'C' : Composite (Expander, Caesar)
				//    'v' : Vernam
				//    'V' : Composite (Expander, Vernam)
				//    default : Copier
				// postcondition: return-value != 0
				// Caution! Function with a side-effect! Do not use in assertions!
	}; // CoderFactory

#endif // CODER_FACTORY_HPP_

