#include "FileZilla.h"
#include "servercapabilities.h"

std::map<CServer, CCapabilities> CServerCapabilities::m_serverMap;

enum capabilities CCapabilities::GetCapability(enum capabilityNames name, wxString* pOption /*=0*/) const
{
	const std::map<enum capabilityNames, struct CCapabilities::t_cap>::const_iterator iter = m_capabilityMap.find(name);
	if (iter == m_capabilityMap.end())
		return unknown;

	if (iter->second.cap == yes && pOption)
		*pOption = iter->second.option;
	return iter->second.cap;
}

void CCapabilities::SetCapability(enum capabilityNames name, enum capabilities cap, const wxString& option /*=_T("")*/)
{
	wxASSERT(cap == yes || option == _T(""));
	struct CCapabilities::t_cap tcap;
	tcap.cap = cap;
	tcap.option = option;

	m_capabilityMap[name] = tcap;
}

enum capabilities CServerCapabilities::GetCapability(const CServer& server, enum capabilityNames name, wxString* pOption /*=0*/)
{
	const std::map<CServer, CCapabilities>::const_iterator iter = m_serverMap.find(server);
	if (iter == m_serverMap.end())
		return unknown;

	return iter->second.GetCapability(name, pOption);
}

void CServerCapabilities::SetCapability(const CServer& server, enum capabilityNames name, enum capabilities cap, const wxString& option /*=_T("")*/)
{
	const std::map<CServer, CCapabilities>::iterator iter = m_serverMap.find(server);
	if (iter == m_serverMap.end())
	{
		CCapabilities capabilities;
		capabilities.SetCapability(name, cap, option);
		m_serverMap[server] = capabilities;
		return;
	}

	iter->second.SetCapability(name, cap, option);
}


syntax highlighted by Code2HTML, v. 0.9.1