📄 pref.cpp
字号:
// 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 + -