⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pref.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return HXR_OK;
}

HX_RESULT CPrefTable::ReadPrefSize(INT32 nPrefKey,HXxSize& size,INT32 nIndex)
{
    CHXBuffer* pBuffer = NULL;
    HX_RESULT result;

    // Try to read the pref
    result = ReadPref(nPrefKey,nIndex,(IHXBuffer*&)pBuffer);

    // Convert the preference to a size
    HXxPoint ptArray;
    if (result == HXR_OK)
    {
	if (ReadPoints((const char*)pBuffer->GetBuffer(),&ptArray,1))
	{
	    size.cx = ptArray.x;
	    size.cy = ptArray.y;

	    // Don't need buffer anymore
	    if (pBuffer)
		pBuffer->Release();
	    return HXR_OK;
	}
    }

    if (m_pPrefTable[nPrefKey].pDefaultValue)
    {
	ReadPoints(m_pPrefTable[nPrefKey].pDefaultValue,&ptArray,1);
	size.cx = ptArray.x;
	size.cy = ptArray.y;
    }
    else
	return HXR_FAIL;

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return HXR_OK;
}

HX_RESULT CPrefTable::ReadPrefPoint(INT32 nPrefKey,HXxPoint& pt,INT32 nIndex)
{
    CHXBuffer* pBuffer = NULL;
    HX_RESULT result;

    // Try to read the pref
    result = ReadPref(nPrefKey,nIndex,(IHXBuffer*&)pBuffer);

    // Convert the preference to a size
    HXxPoint ptArray;
    if (result == HXR_OK)
    {
	if (ReadPoints((const char*)pBuffer->GetBuffer(),&ptArray,1))
	{
	    pt.x = ptArray.x;
	    pt.y = ptArray.y;

	    // Don't need buffer anymore
	    if (pBuffer)
		pBuffer->Release();
	    return HXR_OK;
	}
    }

    if (m_pPrefTable[nPrefKey].pDefaultValue)
    {
	ReadPoints(m_pPrefTable[nPrefKey].pDefaultValue,&ptArray,1);
	pt.x = ptArray.x;
	pt.y = ptArray.y;
    }
    else
	return HXR_FAIL;

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return HXR_OK;
}

HX_RESULT CPrefTable::ReadPrefString(INT32 nPrefKey,char* szString,INT32 nStrLen,INT32 nIndex)
{
    CHXBuffer* pBuffer = NULL;
    HX_RESULT result;

    if (!szString || !nStrLen)
	return HXR_INVALID_PARAMETER;

    // Default return value
    szString[0] = '\0';

    // Try to read the pref
    result = ReadPref(nPrefKey,nIndex,(IHXBuffer*&)pBuffer);

    // Convert the preference to a string
    if (result == HXR_OK)
    {
	strncpy(szString,(const char*)pBuffer->GetBuffer(),(int)nStrLen);
        szString[nStrLen-1] = '\0';
    }
    // Pref doesn't exist convert default value to integer
    else if (m_pPrefTable[(int)nPrefKey].pDefaultValue)
    {
	strncpy(szString,m_pPrefTable[nPrefKey].pDefaultValue,(int)nStrLen);
        szString[nStrLen-1] = '\0';
    }
    else
	return HXR_FAIL;

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return HXR_OK;
}
    
HX_RESULT CPrefTable::ReadPrefBuffer(INT32 nPrefKey,IHXBuffer*& pBuffer,INT32 nIndex)
{
    HX_RESULT result;
    // read_pref creates an IHXBuffer so this should be NULL
    HX_ASSERT(!pBuffer);

    // Try to read the pref
    result = ReadPref(nPrefKey,nIndex,pBuffer);

    // If the pref read failed try to create our own IMRABuffer and copy in the default pref
    if (result != HXR_OK)
    {
	if (m_pPrefTable[nPrefKey].pDefaultValue)
	{
	    pBuffer = new CHXBuffer;
	    if (!pBuffer)
		return HXR_OUTOFMEMORY;
	    pBuffer->AddRef();
	    pBuffer->Set((const UCHAR*)m_pPrefTable[nPrefKey].pDefaultValue,strlen(m_pPrefTable[nPrefKey].pDefaultValue)+1);
	}
	else
	    return HXR_FAIL;
    }

    return HXR_OK;
}

HX_RESULT CPrefTable::WritePref(INT32 nPrefKey,INT32 nIndex,IHXBuffer* pBuffer)
{
    // Index is out of table range if this is false
    HX_ASSERT(nPrefKey >= 0 && nPrefKey < m_nTableEntries);

    // Need to call SetupPrefTable() if this is false
    HX_ASSERT(m_pPrefTable);

    // Index is out of table range
    if (nPrefKey < 0 || nPrefKey >= m_nTableEntries)
	return HXR_INVALID_PARAMETER;

    // Need to call SetupPrefTable()
    if (!m_pPrefTable || (!m_pCPref && !m_pIHXPrefs))
	return HXR_UNEXPECTED;

    // If we have an indexed pref append index number to pref
    if (nIndex > 0)
    {
        char szIndexedPref[MAX_PREF_NAME]; /* Flawfinder: ignore */
	SafeSprintf(szIndexedPref,MAX_PREF_NAME,"%s%ld",m_pPrefTable[nPrefKey].szPrefName,nIndex);
	return (m_pCPref ? m_pCPref->write_pref(szIndexedPref,pBuffer) : m_pIHXPrefs->WritePref(szIndexedPref,pBuffer));
    }
    else
	return (m_pCPref ? m_pCPref->write_pref(m_pPrefTable[nPrefKey].szPrefName,pBuffer) : m_pIHXPrefs->WritePref(m_pPrefTable[nPrefKey].szPrefName,pBuffer));
}

IHXBuffer* CPrefTable::CreateIHXBuffer(const char* szString)
{
    // Create new buffer
    CHXBuffer* pBuffer = new CHXBuffer();
    if (!pBuffer)
	return NULL;

    // Addref and fill buffer
    pBuffer->AddRef();
    pBuffer->Set((const UCHAR*)szString,strlen(szString)+1);

    return pBuffer;
}

HX_RESULT CPrefTable::WritePrefColor(INT32 nPrefKey,const HXxColor& color,INT32 nIndex)
{
    INT32 lValue = (INT32)color;
    return WritePrefInt(nPrefKey,lValue,nIndex);
}

HX_RESULT CPrefTable::WritePrefInt(INT32 nPrefKey,INT32 nValue,INT32 nIndex)
{
    IHXBuffer* pBuffer = NULL;
    char szBuff[MAX_INT_BUFFER]; /* Flawfinder: ignore */
    
    SafeSprintf(szBuff, sizeof(szBuff), "%ld", nValue);

    // Create buffer and write pref
    pBuffer = CreateIHXBuffer(szBuff);
    HX_RESULT result = WritePref(nPrefKey,nIndex,pBuffer);

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return result;
}

HX_RESULT CPrefTable::WritePrefRect(INT32 nPrefKey,const HXxRect& rect,INT32 nIndex)
{
    IHXBuffer* pBuffer = NULL;
    char szBuff[MAX_RECT_BUFFER]; /* Flawfinder: ignore */
    
    SafeSprintf(szBuff, sizeof(szBuff), "%ld,%ld,%ld,%ld",
                rect.left, rect.top, rect.right, rect.bottom);

    // Create buffer and write pref
    pBuffer = CreateIHXBuffer(szBuff);
    HX_RESULT result = WritePref(nPrefKey,nIndex,pBuffer);

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return result;
}

HX_RESULT CPrefTable::WritePrefSize(INT32 nPrefKey,const HXxSize& size,INT32 nIndex)
{
    IHXBuffer* pBuffer = NULL;
    char szBuff[MAX_SIZE_BUFFER]; /* Flawfinder: ignore */
    
    SafeSprintf(szBuff, sizeof(szBuff), "%ld,%ld", size.cx, size.cy);

    // Create buffer and write pref
    pBuffer = CreateIHXBuffer(szBuff);
    HX_RESULT result = WritePref(nPrefKey,nIndex,pBuffer);

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return result;
}

HX_RESULT CPrefTable::WritePrefPoint(INT32 nPrefKey,const HXxPoint& pt,INT32 nIndex)
{
    IHXBuffer* pBuffer = NULL;
    char szBuff[MAX_POINT_BUFFER]; /* Flawfinder: ignore */
    
    SafeSprintf(szBuff, sizeof(szBuff), "%ld,%ld", pt.x, pt.y);

    // Create buffer and write pref
    pBuffer = CreateIHXBuffer(szBuff);
    HX_RESULT result = WritePref(nPrefKey,nIndex,pBuffer);

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return result;
}

HX_RESULT CPrefTable::WritePrefString(INT32 nPrefKey,const char* szString,INT32 nIndex)
{
    IHXBuffer* pBuffer = NULL;

    // Create buffer and write pref
    pBuffer = CreateIHXBuffer(szString);
    HX_RESULT result = WritePref(nPrefKey,nIndex,pBuffer);

    // Don't need buffer anymore
    if (pBuffer)
	pBuffer->Release();

    return result;
}

HX_RESULT CPrefTable::WritePrefBuffer(INT32 nPrefKey,IHXBuffer* pBuffer,INT32 nIndex)
{
    return WritePref(nPrefKey,nIndex,pBuffer);
}

HX_RESULT CPrefTable::BeginSubPref(INT32 nPrefKey)
{
    // Index is out of table range if this is false
    HX_ASSERT(nPrefKey >= 0 && nPrefKey < m_nTableEntries);

    // Need to call SetupPrefTable() if this is false
    HX_ASSERT(m_pPrefTable);

    // Index is out of table range
    if (nPrefKey < 0 || nPrefKey >= m_nTableEntries)
	return HXR_INVALID_PARAMETER;

    // Need to call SetupPrefTable()
    if (!m_pPrefTable || !m_pCPref)
	return HXR_UNEXPECTED;

    // Call BeginSubPref with the actual string
    return m_pCPref->BeginSubPref(m_pPrefTable[nPrefKey].szPrefName);
}

///////////////////////////////////////////////
#ifdef PREFTESTING

#include <stdio.h>

#define INITGUID

#include "hxcom.h"
#include "ihxpckts.h"

#include "pref.h"
#include "playpref.h"
#include "chxpckts.h"

int main(int argc, char **argv)
{
	CPref *mPref = 0;
	CHXBuffer* pinBuffer = 0;
	CHXBuffer* poutBuffer = 0;

#ifdef _WINDOWS
	const char* pCompanyName = HXVER_COMPANY;
	const char* pProductName = HXVER_SDK_PRODUCT;
	int			nMajVer = TARVER_MAJOR_VERSION;
	int			nMinVer = TARVER_MINOR_VERSION;
#else
	const char* pCompanyName = HXVER_COMPANY;
	const char* pProductName = HXVER_SDK_PRODUCT;
	int			nMajVer = 6;
	int			nMinVer = 0;
#endif

	char * pComa = HXFindChar(pCompanyName, ',');
	if(pComa)
        *pComa = 0;

	mPref = CPlayerPref::open_pref(pCompanyName,pProductName,nMajVer,nMinVer);

	pinBuffer = new CHXBuffer;
	if ( !pinBuffer )
	{
		printf("can't create CHXBuffer\n");
		exit(0);
	}
	char *svalue = 0;
	svalue = (char*) new char [ 10 ];
	strcpy(svalue, "IsADog"); /* Flawfinder: ignore */
	pinBuffer->AddRef();
	pinBuffer->Set((const unsigned char*) svalue, strlen(svalue) + 1);
	mPref->write_pref("Pushkin",pinBuffer);
	mPref->read_pref("Pushkin",poutBuffer);
//	printf("Pushkin is: %s\n",(char*) (poutBuffer->GetBuffer()));

	if ( mPref ) 
		delete mPref;

	exit(0);
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -