Add EngineFactory class for creating engines.
The EngineFactory class has two purposes:
1. Reverse the dependencies so that application code does not depend
on any specific engine code such as XboardEngine or UciEngine
classes. Instead the application code depends only on EngineFactory.
2. Remove application code like:
ChessEngine* engine = 0;
if (protocol == ChessEngine::Xboard)
{
return new XboardEngine(...)
}
else if (protocol == ChessEngine::Uci)
{
return new UciEngine(...)
}
else if ...
Becomes:
ChessEngine* engine = EngineFactory::createEngine(protocol, ...);