Example #1
0
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;
}
Example #3
0
void DancingLinksCell::Erase()
{
  RemoveCell();
  left_ptr_ ->set_right_ptr(right_ptr_);
  right_ptr_->set_left_ptr (left_ptr_ );
}