/*! Retrait du dernier élément */
struct Cache_Block_Header *Cache_List_Remove_Last(struct Cache_List *list)
{
	if(Cache_List_Is_Empty(list))
		return NULL;
		
	while(list->next)
		list = list->next;
		
	struct Cache_Block_Header *cbh = list->pheader;
	
	list->prev->next = NULL;
	
	free(list);
	
	return cbh;
}
Example #2
0
/*!
 * LRU : On prend le premier bloc invalide. S'il n'y en a plus, on prend le bloc le moins récemment utilisé.
 */
struct Cache_Block_Header *Strategy_Replace_Block(struct Cache *pcache)
{
    struct Cache_Block_Header *pbh;

    /* On cherche d'abord un bloc invalide */
    if ((pbh = Get_Free_Block(pcache)) != NULL) return pbh;

    if (Cache_List_Is_Empty(pcl)) {
    	perror("vide : pas possible");
    	exit(1);
    }

    pbh = Cache_List_Remove_First(pcl);
    Cache_List_Append(pcl, pbh);

    return pbh;
}