void EvictAssetsAsNecessary(assets_s* assets) { Assert(assets->memoryNeeded < assets->dyMemoryBlock.stack.size) uint64_t memoryEvicted = 0; cell_s* cellToCheck = assets->assetUseQueue.head; while(memoryEvicted < assets->memoryNeeded) { assetData_s* leastRecentlyUsedAsset = (assetData_s*) cellToCheck->data; //(assetData_s*) Pop(&assets->assetUseQueue); assetState_e state = GetSlotState(leastRecentlyUsedAsset); cell_s* nextCell; if(state == assetState_loaded && !IsLocked(leastRecentlyUsedAsset)) { memoryEvicted += EvictAsset(assets, leastRecentlyUsedAsset); nextCell = cellToCheck->next; RemoveCell(&assets->assetUseQueue, cellToCheck); } else { nextCell = cellToCheck->next; } cellToCheck = nextCell; } assets->memoryNeeded = 0; }
int RemoveValueCell(int indx) { MONITOR_ENTER(serializeAccess, "thread"); int status = RemoveCell(ValueCells, indx); MONITOR_EXIT(serializeAccess, "thread"); return status; }
void DancingLinksCell::Erase() { RemoveCell(); left_ptr_ ->set_right_ptr(right_ptr_); right_ptr_->set_left_ptr (left_ptr_ ); }