QuantumNumber FreeSpaceArrayPtr::FreeSpaceArray::FindSpaceForItem( ObjectNumber p_ObjectNumber, ArrayIndex p_ItemSize) { ArrayIndex Block; ArrayIndex Element; ArrayIndex Result = BadArrayIndex; ArrayIndex ItemSizeCode = p_ItemSize / FreeSpaceConversion; QFreeSpaceEntry TempFreeSpaceEntry; LeafBlockPtr TempLeafBlockPtr; for (Block = 0; Block < m_FreeSpaceListBlockCount; Block ++) { for (Element = 0; Element < FreeSpaceEntriesPerBlock; Element ++) { TempFreeSpaceEntry = m_BlockPtr[Block]->Get(Element); if (TempFreeSpaceEntry.m_FreeSpaceCode == AvailableQuantum) { TempFreeSpaceEntry.m_ObjectNumber = p_ObjectNumber; m_BlockPtr[Block]->Set(Element,TempFreeSpaceEntry); Result = Block * FreeSpaceEntriesPerBlock + Element; TempLeafBlockPtr = m_BlockPtr[Block]->MakeLeafBlockPtr(Result); TempLeafBlockPtr->Clear(); TempLeafBlockPtr->SetQuantumType(LEAF_NODE); TempLeafBlockPtr->SetMainObjectNumber(p_ObjectNumber); break; } if (TempFreeSpaceEntry.m_ObjectNumber == p_ObjectNumber && TempFreeSpaceEntry.m_FreeSpaceCode > ItemSizeCode) { Result = Block * FreeSpaceEntriesPerBlock + Element; TempLeafBlockPtr = m_BlockPtr[Block]->MakeLeafBlockPtr(Result); if (TempLeafBlockPtr->CalculateFreeSpace() > p_ItemSize) break; else Result = BadArrayIndex; } } if (Result != BadArrayIndex) break; } return Result; }