www.pudn.com > lucent_softphone.rar > KVList.cpp


// KVList.cpp : Implementation of CKVList 
#include "stdafx.h" 
#include "LucentCti.h" 
///////////////////////////////////////////////////////////////////////////// 
// CKVList 
 
#include "KVPair.h" 
#include "KVList.h" 
 
DECLARE_CASTER(CKVList, IKVList) 
DECLARE_CREATOR(CKVList, IKVList) 
DECLARE_CREATOR(CKVPair, IKVPair) 
 
LPKVLIST CreateKVList(TKVList *pKVList) 
{ 
	if(!pKVList) return(NULL); 
	CKVList *pList = NULL; 
	IKVList *iList = NULL; 
	TKVList *pl = TKVListDup(pKVList); 
	if(pl) { 
		if(SUCCEEDED(CreateClass(&pList, &iList))) { 
			TKVListFree(pList->m_pKVList); 
			pList->m_pKVList = pl; 
		} else 
			TKVListFree(pl); 
	} 
	return(iList); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CKVList 
 
STDMETHODIMP_(LPKVLIST) CKVList::Dup() 
{ 
	// TODO: Add your implementation code here 
	return(CreateKVList(m_pKVList)); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::AddString(BSTR key, BSTR value) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key && value) { 
		char keybuf[256], valuebuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		WideCharToMultiByte(CP_ACP, 0, value, -1, valuebuf, 256, NULL, NULL); 
		res = (KVRESULTS)TKVListAddString(m_pKVList, keybuf, valuebuf); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::AddInt(BSTR key, int value) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		res = (KVRESULTS)TKVListAddInt(m_pKVList, keybuf, value); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::AddList(BSTR key, LPKVLIST value) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	CKVList *pList = I2C(value); 
	if(key && pList) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		res = (KVRESULTS)TKVListAddList(m_pKVList, keybuf, pList->m_pKVList); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::AddBinary(BSTR key, int length, byte *value) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key && length && value) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		res = (KVRESULTS)TKVListAddBinary(m_pKVList, keybuf, value, length); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::DeletePair(BSTR key) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		res = (KVRESULTS)TKVListDeletePair(m_pKVList, keybuf); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::DeleteAll() 
{ 
	// TODO: Add your implementation code here 
	return((KVRESULTS)TKVListDeleteAll(m_pKVList)); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::InitScanLoop() 
{ 
	// TODO: Add your implementation code here 
	return((KVRESULTS)TKVListInitScanLoop(m_pKVList)); 
} 
 
STDMETHODIMP_(LPKVPAIR) CKVList::NextPair() 
{ 
	// TODO: Add your implementation code here 
	CKVPair *pPair = NULL; 
	IKVPair *iPair = NULL; 
	TKVPair *p = TKVListNextPair(m_pKVList); 
	if(p && SUCCEEDED(CreateClass(&pPair, &iPair))) { 
		if(!pPair->Initialize(p)) { 
			iPair->Release(); 
			iPair = NULL; 
		} 
	} 
	return(iPair); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::GetStringValue(BSTR key, BSTR *pVal) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		*pVal = C2B(TKVListGetStringValue(m_pKVList, keybuf, (TKVResult *)&res)); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::GetIntValue(BSTR key, int *pVal) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		*pVal = TKVListGetIntValue(m_pKVList, keybuf, (TKVResult *)&res); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::GetListValue(BSTR key, LPKVLIST *pVal) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		*pVal = CreateKVList(TKVListGetListValue(m_pKVList, keybuf, (TKVResult *)&res)); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::GetBinaryValue(BSTR key, byte **pVal) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		*pVal = TKVListGetBinaryValue(m_pKVList, keybuf, (TKVResult *)&res); 
	} 
	return(res); 
} 
 
STDMETHODIMP_(KVRESULTS) CKVList::GetPair(BSTR key, LPKVPAIR *pVal) 
{ 
	// TODO: Add your implementation code here 
	KVRESULTS res = KVR_Error; 
	if(key) { 
		char keybuf[256]; 
		WideCharToMultiByte(CP_ACP, 0, key, -1, keybuf, 256, NULL, NULL); 
		CKVPair *pPair = NULL; 
		IKVPair *iPair = NULL; 
		TKVPair *p = TKVListGetPair(m_pKVList, keybuf, (TKVResult *)&res); 
		if(p && SUCCEEDED(CreateClass(&pPair, &iPair))) { 
			if(!pPair->Initialize(p)) { 
				iPair->Release(); 
				iPair = NULL; 
			} 
		} 
		*pVal = iPair; 
	} 
	return(res); 
}