#ifndef __RETRO_IFACTORY_HPP__
#define __RETRO_IFACTORY_HPP__

#include <memory>
#include "RetroTypes.hpp"

namespace Retro
{
class CVParamTransfer;
class IObj;

class IFactory
{
public:
    virtual ~IFactory() {}
    virtual std::unique_ptr<IObj> Build(const SObjectTag&, const CVParamTransfer&)=0;
    virtual void BuildAsync(const SObjectTag&, const CVParamTransfer&, IObj**)=0;
    virtual void CancelBuild(const SObjectTag&)=0;
    virtual bool CanBuild(const SObjectTag&)=0;
    virtual const SObjectTag* GetResourceIdByName(const char*) const=0;
};

}

#endif // __RETRO_IFACTORY_HPP__