bool CThreadLocalStorage::AllocateAndSetStorageValue(const HTLSKEYSELECTOR &hksKeySelector, tlsindextype iValueIndex, tlsvaluetype vValueData, CTLSValueDestructor fnValueDestructor) { OU_ASSERT(OU_IN_SIZET_RANGE(DecodeInstanceKindFromKeySelector(hksKeySelector), SIK__MIN, SIK__MAX)); bool bResult = false; do { ESTORAGEINSTANCEKIND ikInstanceKind = (ESTORAGEINSTANCEKIND)DecodeInstanceKindFromKeySelector(hksKeySelector); CTLSStorageInstance *psiStorageInstance = g_apsiStorageGlobalInstances[ikInstanceKind]; CTLSStorageBlock *psbStorageBlock; if (!psiStorageInstance->FindFreeStorageBlock(psbStorageBlock)) { break; } SetKeyStorageBlock(hksKeySelector, psbStorageBlock); psbStorageBlock->SetValueData(iValueIndex, vValueData); psbStorageBlock->SetValueDestructor(iValueIndex, fnValueDestructor); bResult = true; } while (false); return bResult; }
bool CThreadLocalStorage::AllocateAndSetStorageValue( tlsindextype iValueIndex, tlsvaluetype vValueData, CTLSValueDestructor fnValueDestructor) { bool bResult = false; do { CTLSStorageInstance *psiStorageInstance = g_psiStorageGlobalInstance; CTLSStorageBlock *psbStorageBlock; if (!psiStorageInstance->FindFreeStorageBlock(psbStorageBlock)) { break; } const HTLSKEY &hskStorageKey = psiStorageInstance->RetrieveStorageKey(); SetKeyStorageBlock(hskStorageKey, psbStorageBlock); psbStorageBlock->SetValueData(iValueIndex, vValueData); psbStorageBlock->SetValueDestructor(iValueIndex, fnValueDestructor); bResult = true; } while (false); return bResult; }