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

📄 chxliteprefs.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                    {                        eState = eParsingComment;                    }                    break;                    default:                    {                        eState = eParsingName;                        sName = *pos; // don't lose this char                    }                }                ++pos;                --nCount;        }        break;        default:            HX_ASSERT(false);            break;        }    }    return HXR_OK;}voidLitePrefs::ClearPrefs(CHXMapStringToOb* pPrefs){    POSITION pos = pPrefs->GetStartPosition();    while(pos != NULL)    {        Pref * pPref = NULL;        char * szPrefKey = NULL;        pPrefs->GetNextAssoc( pos, (const char*&) szPrefKey, (void*&) pPref );        HX_ASSERT(pPref);        delete pPref;    }    pPrefs->RemoveAll();}HX_RESULT LitePrefs::RetrievePref(IHXCommonClassFactory* pFactory,			   const CHXMapStringToOb* pPrefs,			   const char* pName,			   REF(IHXBuffer*) pValue){    HX_RESULT res = HXR_FAIL;    Pref* pPref = NULL;    if (pPrefs->Lookup(pName, (void*&)pPref))    {	res = pFactory->CreateInstance(CLSID_IHXBuffer, (void**)&pValue);	if (SUCCEEDED(res))	{	    res = pValue->Set((const UCHAR*)pPref->Buffer(), 				   pPref->Size());	}    }    return res;}BOOLLitePrefs::SkipToken(char*& pos, INT32& nCount, char term){    BOOL bRet = FALSE;    while (*pos != term && nCount != 0)    {        ++pos;        --nCount;    }    if( nCount != 0 )    {        // skip term        ++pos;        --nCount;        bRet = TRUE;    }    return bRet;}BOOLLitePrefs::ParseToken(char*& pos, INT32& nCount, char term, CHXString& token){    BOOL bRet = FALSE;    while (*pos != term && nCount != 0)    {        token += *pos;        ++pos;        --nCount;    }    if( nCount != 0 )    {        // skip term        ++pos;        --nCount;        // trim white space around token        token.TrimLeft();        token.TrimRight();        bRet = TRUE;    }    return bRet;}//// class CHXLitePrefs//CHXLitePrefs::CHXLitePrefs(const char* pRootPath): m_pMutex(NULL), m_pFactory(NULL), m_pScheduler(NULL), m_hCallback((CallbackHandle)NULL), m_strRootPath(pRootPath), m_bAutoCommit(true){#ifdef THREADS_SUPPORTED    HXMutex::MakeMutex(m_pMutex);#else    HXMutex::MakeStubMutex(m_pMutex);#endif    m_prefs.SetCaseSensitive(FALSE);}CHXLitePrefs::~CHXLitePrefs(){    Close();}inlineCHXString CHXLitePrefs::GetFullPath(const CHXString& strFileName){    return HXPathUtil::CombinePath(m_strRootPath, strFileName);}voidCHXLitePrefs::Close(){#if !defined(HELIX_CONFIG_LITEPREFS_SLUGGISH_OUT)    // remove pending callback    if (m_hCallback)    {	m_pScheduler->Remove(m_hCallback);        m_hCallback = (CallbackHandle)NULL;    }#endif // (HELIX_CONFIG_LITEPREFS_SLUGGISH_OUT)    // commit changes    Commit();    // cleanup    LitePrefs::ClearPrefs(&m_prefs);    HX_RELEASE(m_pFactory);    HX_RELEASE(m_pScheduler);    HX_DELETE(m_pMutex);}// IHXPreferencesSTDMETHODIMPCHXLitePrefs::ReadPref(const char* pName, REF(IHXBuffer*) pValue){    HX_RESULT res = HXR_FAIL;    if (pName && m_pFactory)    {	m_pMutex->Lock();	res = LitePrefs::RetrievePref(m_pFactory, &m_prefs, pName, pValue);	m_pMutex->Unlock();    }    return res;}STDMETHODIMPCHXLitePrefs::SetAutoCommit(bool bAutoCommit){    // if false, client must explicitly call Commit() to save changes after write    m_bAutoCommit = bAutoCommit;    return HXR_OK;}voidCHXLitePrefs::PossiblyCommitPrefChange(){    if (m_bAutoCommit)    {#if defined(HELIX_CONFIG_LITEPREFS_SLUGGISH_OUT)              HX_VERIFY(SUCCEEDED(Commit()));#else        // schedule a callback and commit the changes        // so that multiple WritePref calls result in only one write to file	if (!m_hCallback && m_pScheduler)	{	    m_hCallback = m_pScheduler->RelativeEnter(this, 0);	    HX_ASSERT(m_hCallback);	}	else if (!m_pScheduler)	{	    // lame... no scheduler!	    HX_VERIFY(SUCCEEDED(Commit()));	}#endif    }}STDMETHODIMPCHXLitePrefs::WritePref(const char* pName, IHXBuffer* pValue){    HX_RESULT res = HXR_FAIL;    if (pName && pValue)    {	m_pMutex->Lock();	res = LitePrefs::StorePref(&m_prefs, pName, (const char*)pValue->GetBuffer());        if(SUCCEEDED(res))        {            PossiblyCommitPrefChange();        }        m_pMutex->Unlock();    }    return res;}// IHXPreferences3STDMETHODIMPCHXLitePrefs::Open(const char* pCompanyName,		   const char* pProductName,		   ULONG32 nProdMajorVer,		   ULONG32 nProdMinorVer){    HX_RESULT res = HXR_INVALID_PARAMETER;    if (pProductName)    {        m_strFileName.Format("%s_%lu_%lu.cfg",pProductName, nProdMajorVer, nProdMinorVer); 	LitePrefs::ClearPrefs(&m_prefs);            CHXString strPath = GetFullPath(m_strFileName);        res = LitePrefs::ReadPrefs(strPath, &m_prefs);    }    return res;}STDMETHODIMPCHXLitePrefs::OpenShared(const char* pCompanyName){    return HXR_NOTIMPL; //Open(pCompanyName, "Shared", 0, 0);}STDMETHODIMPCHXLitePrefs::DeletePref(const char* pPrefKey){    HX_RESULT hr = HXR_FAIL;    Pref* pPref = NULL;    m_pMutex->Lock();    if (m_prefs.Lookup(pPrefKey, (void*&)pPref))    {	// delete the pref        m_prefs.RemoveKey(pPrefKey);	delete pPref;        PossiblyCommitPrefChange();        hr = HXR_OK;    }    m_pMutex->Unlock();    return hr;}//// Restore primary pref file so it contains no pref// settings (and update current prefs accordingly) //STDMETHODIMPCHXLitePrefs::ResetPrefs(){    m_pMutex->Lock();    // force re-write of file so only shadow references remain.    LitePrefs::ClearPrefs(&m_prefs);    Commit();    // re-build memory prefs (so default values from shadows are set)    CHXString strPrimaryFilePath = GetFullPath(m_strFileName);    HX_RESULT hr = LitePrefs::ReadPrefs(strPrimaryFilePath, &m_prefs);    m_pMutex->Lock();    return hr;}STDMETHODIMPCHXLitePrefs::SetContext(IUnknown* pContext){    HX_RESULT res = HXR_FAIL;    if (!m_pFactory && pContext)    {	res = pContext->QueryInterface(IID_IHXCommonClassFactory,				       (void**)&m_pFactory);	HX_ASSERT(SUCCEEDED(res));#if !defined(HELIX_CONFIG_LITEPREFS_SLUGGISH_OUT)	res = pContext->QueryInterface(IID_IHXScheduler,				       (void**)&m_pScheduler);	HX_ASSERT(SUCCEEDED(res));#endif // (HELIX_CONFIG_LITEPREFS_SLUGGISH_OUT)    }    return res;}STDMETHODIMPCHXLitePrefs::Commit(){    HX_RESULT res = HXR_NOT_INITIALIZED;        if (m_strFileName)    {	m_pMutex->Lock();        CHXString strPath = GetFullPath(m_strFileName);	res = LitePrefs::WritePrefs(&m_prefs, strPath);	m_pMutex->Unlock();    }    return res;}// IHXCallback#if !defined(HELIX_CONFIG_LITEPREFS_SLUGGISH_OUT)STDMETHODIMPCHXLitePrefs::Func(){    m_hCallback = (CallbackHandle)NULL;    HX_VERIFY(SUCCEEDED(Commit()));    return HXR_OK;}#endif

⌨️ 快捷键说明

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