📄 pref.cpp
字号:
rect.left = ptArray[0].x; rect.top = ptArray[0].y; rect.right = ptArray[1].x; rect.bottom = ptArray[1].y; } else return HXR_FAIL; // 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 + -