1// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "net/disk_cache/mem_rankings.h" 6 7#include "base/logging.h" 8#include "net/disk_cache/mem_entry_impl.h" 9 10namespace disk_cache { 11 12MemRankings::~MemRankings() { 13 DCHECK(!head_ && !tail_); 14} 15 16void MemRankings::Insert(MemEntryImpl* node) { 17 if (head_) 18 head_->set_prev(node); 19 20 if (!tail_) 21 tail_ = node; 22 23 node->set_prev(NULL); 24 node->set_next(head_); 25 head_ = node; 26} 27 28void MemRankings::Remove(MemEntryImpl* node) { 29 MemEntryImpl* prev = node->prev(); 30 MemEntryImpl* next = node->next(); 31 32 if (head_ == node) 33 head_ = next; 34 35 if (tail_ == node) 36 tail_ = prev; 37 38 if (prev) 39 prev->set_next(next); 40 41 if (next) 42 next->set_prev(prev); 43 44 node->set_next(NULL); 45 node->set_prev(NULL); 46} 47 48void MemRankings::UpdateRank(MemEntryImpl* node) { 49 Remove(node); 50 Insert(node); 51} 52 53MemEntryImpl* MemRankings::GetNext(MemEntryImpl* node) { 54 if (!node) 55 return head_; 56 57 return node->next(); 58} 59 60MemEntryImpl* MemRankings::GetPrev(MemEntryImpl* node) { 61 if (!node) 62 return tail_; 63 64 return node->prev(); 65} 66 67} // namespace disk_cache 68