| Index: net/disk_cache/rankings.h
 | 
| ===================================================================
 | 
| --- net/disk_cache/rankings.h	(revision 6843)
 | 
| +++ net/disk_cache/rankings.h	(working copy)
 | 
| @@ -48,6 +48,15 @@
 | 
|  // This class handles the ranking information for the cache.
 | 
|  class Rankings {
 | 
|   public:
 | 
| +  // Possible lists of entries.
 | 
| +  enum List {
 | 
| +    NO_USE = 0,   // List of entries that have not been reused.
 | 
| +    LOW_USE,      // List of entries with low reuse.
 | 
| +    HIGH_USE,     // List of entries with high reuse.
 | 
| +    DELETED,      // List of recently deleted or doomed entries.
 | 
| +    LAST_ELEMENT
 | 
| +  };
 | 
| +
 | 
|    // This class provides a specialized version of scoped_ptr, that calls
 | 
|    // Rankings whenever a CacheRankingsBlock is deleted, to keep track of cache
 | 
|    // iterators that may go stale.
 | 
| @@ -73,8 +82,7 @@
 | 
|      DISALLOW_EVIL_CONSTRUCTORS(ScopedRankingsBlock);
 | 
|    };
 | 
|  
 | 
| -  Rankings()
 | 
| -      : init_(false), head_(0), tail_(0) {}
 | 
| +  Rankings() : init_(false) {}
 | 
|    ~Rankings() {}
 | 
|  
 | 
|    bool Init(BackendImpl* backend);
 | 
| @@ -83,20 +91,20 @@
 | 
|    void Reset();
 | 
|  
 | 
|    // Inserts a given entry at the head of the queue.
 | 
| -  void Insert(CacheRankingsBlock* node, bool modified);
 | 
| +  void Insert(CacheRankingsBlock* node, bool modified, List list);
 | 
|  
 | 
|    // Removes a given entry from the LRU list.
 | 
| -  void Remove(CacheRankingsBlock* node);
 | 
| +  void Remove(CacheRankingsBlock* node, List list);
 | 
|  
 | 
|    // Moves a given entry to the head.
 | 
| -  void UpdateRank(CacheRankingsBlock* node, bool modified);
 | 
| +  void UpdateRank(CacheRankingsBlock* node, bool modified, List list);
 | 
|  
 | 
|    // Iterates through the list.
 | 
| -  CacheRankingsBlock* GetNext(CacheRankingsBlock* node);
 | 
| -  CacheRankingsBlock* GetPrev(CacheRankingsBlock* node);
 | 
| +  CacheRankingsBlock* GetNext(CacheRankingsBlock* node, List list);
 | 
| +  CacheRankingsBlock* GetPrev(CacheRankingsBlock* node, List list);
 | 
|    void FreeRankingsBlock(CacheRankingsBlock* node);
 | 
|  
 | 
| -  // Peforms a simple self-check of the list, and returns the number of items
 | 
| +  // Peforms a simple self-check of the lists, and returns the number of items
 | 
|    // or an error code (negative value).
 | 
|    int SelfCheck();
 | 
|  
 | 
| @@ -108,10 +116,10 @@
 | 
|    typedef std::pair<CacheAddr, CacheRankingsBlock*> IteratorPair;
 | 
|    typedef std::list<IteratorPair> IteratorList;
 | 
|  
 | 
| -  Addr ReadHead();
 | 
| -  Addr ReadTail();
 | 
| -  void WriteHead();
 | 
| -  void WriteTail();
 | 
| +  void ReadHeads();
 | 
| +  void ReadTails();
 | 
| +  void WriteHead(List list);
 | 
| +  void WriteTail(List list);
 | 
|  
 | 
|    // Gets the rankings information for a given rankings node.
 | 
|    bool GetRanking(CacheRankingsBlock* rankings);
 | 
| @@ -127,11 +135,19 @@
 | 
|  
 | 
|    // Returns false if node is not properly linked.
 | 
|    bool CheckLinks(CacheRankingsBlock* node, CacheRankingsBlock* prev,
 | 
| -                  CacheRankingsBlock* next);
 | 
| +                  CacheRankingsBlock* next, List list);
 | 
|  
 | 
|    // Checks the links between two consecutive nodes.
 | 
|    bool CheckSingleLink(CacheRankingsBlock* prev, CacheRankingsBlock* next);
 | 
|  
 | 
| +  // Peforms a simple check of the list, and returns the number of items or an
 | 
| +  // error code (negative value).
 | 
| +  int CheckList(List list);
 | 
| +
 | 
| +  // Returns true if addr is the head or tail of any list.
 | 
| +  bool IsHead(CacheAddr addr);
 | 
| +  bool IsTail(CacheAddr addr);
 | 
| +
 | 
|    // Controls tracking of nodes used for enumerations.
 | 
|    void TrackRankingsBlock(CacheRankingsBlock* node, bool start_tracking);
 | 
|  
 | 
| @@ -139,8 +155,8 @@
 | 
|    void UpdateIterators(CacheRankingsBlock* node);
 | 
|  
 | 
|    bool init_;
 | 
| -  Addr head_;
 | 
| -  Addr tail_;
 | 
| +  Addr heads_[LAST_ELEMENT];
 | 
| +  Addr tails_[LAST_ELEMENT];
 | 
|    BackendImpl* backend_;
 | 
|    LruData* control_data_;  // Data related to the LRU lists.
 | 
|    IteratorList iterators_;
 | 
| 
 |