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