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