// *****************************************************************************
// File:			IConfig.hpp
//
// Description:		dgVoodoo Config functionality interface
//
// Contact person:	DG
//
// *****************************************************************************

#ifndef		ICONFIG_HPP
#define		ICONFIG_HPP

// --- Includes ----------------------------------------------------------------

#include "APITypes.h"
#include "dgVoodooConfig.hpp"
#include "APIDebugObj.hpp"

namespace dgVoodoo {

// --- IConfig -----------------------------------------------------------------

class IConfig
{

public:
	virtual	bool		ReadConfig (Config& toConfig, const char* pFileName, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		ReadConfig (Config& toConfig, const wchar_t* pFileName, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		ReadConfig (Config& toConfig, HANDLE hFile, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		ReadConfig (Config& toConfig, IAPIDataStream* pFromStream, const APIDebugObj* pDebug = NULL) = 0;

	virtual	bool		WriteConfig (const Config& fromConfig, const char* pFileName, const char* pINITemplate = NULL, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		WriteConfig (const Config& fromConfig, const wchar_t* pFileName, const char* pINITemplate = NULL, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		WriteConfig (const Config& fromConfig, HANDLE hFile, const char* pINITemplate = NULL, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		WriteConfig (const Config& fromConfig, IAPIDataStream* pToStream, const char* pINITemplate = NULL, const APIDebugObj* pDebug = NULL) = 0;

	virtual	bool		WriteConfig_254 (const Config& fromConfig, const char* pFileName, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		WriteConfig_254 (const Config& fromConfig, const wchar_t* pFileName, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		WriteConfig_254 (const Config& fromConfig, HANDLE hFile, const APIDebugObj* pDebug = NULL) = 0;
	virtual	bool		WriteConfig_254 (const Config& fromConfig, IAPIDataStream* pToStream, const APIDebugObj* pDebug = NULL) = 0;

	virtual	bool		ValidateConfig (const Config& config, const APIDebugObj* pDebug = NULL) = 0;
	virtual const char*	GetINITemplate () = 0;

	virtual	bool		IsResolutionTypeDynamic (UInt32 width, UInt32 height) = 0;
};


} // namespace dgVoodoo


#endif // ICONFIG_HPP