| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This is an internal class that handles the address of a cache record. | 5 // This is an internal class that handles the address of a cache record. |
| 6 // See net/disk_cache/disk_cache.h for the public interface of the cache. | 6 // See net/disk_cache/disk_cache.h for the public interface of the cache. |
| 7 | 7 |
| 8 #ifndef NET_DISK_CACHE_ADDR_H_ | 8 #ifndef NET_DISK_CACHE_ADDR_H_ |
| 9 #define NET_DISK_CACHE_ADDR_H_ | 9 #define NET_DISK_CACHE_ADDR_H_ |
| 10 | 10 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 // 7 = evicted entries block file | 47 // 7 = evicted entries block file |
| 48 // | 48 // |
| 49 // If separate file: | 49 // If separate file: |
| 50 // 0000 1111 1111 1111 1111 1111 1111 1111 : file# 0 - 268,435,456 (2^28) | 50 // 0000 1111 1111 1111 1111 1111 1111 1111 : file# 0 - 268,435,456 (2^28) |
| 51 // | 51 // |
| 52 // If block file: | 52 // If block file: |
| 53 // 0000 1100 0000 0000 0000 0000 0000 0000 : reserved bits | 53 // 0000 1100 0000 0000 0000 0000 0000 0000 : reserved bits |
| 54 // 0000 0011 0000 0000 0000 0000 0000 0000 : number of contiguous blocks 1-4 | 54 // 0000 0011 0000 0000 0000 0000 0000 0000 : number of contiguous blocks 1-4 |
| 55 // 0000 0000 1111 1111 0000 0000 0000 0000 : file selector 0 - 255 | 55 // 0000 0000 1111 1111 0000 0000 0000 0000 : file selector 0 - 255 |
| 56 // 0000 0000 0000 0000 1111 1111 1111 1111 : block# 0 - 65,535 (2^16) | 56 // 0000 0000 0000 0000 1111 1111 1111 1111 : block# 0 - 65,535 (2^16) |
| 57 // |
| 58 // Note that an Addr can be used to "point" to a variety of different objects, |
| 59 // from a given type of entry to random blobs of data. Conceptually, an Addr is |
| 60 // just a number that someone can inspect to find out how to locate the desired |
| 61 // record. Most users will not care about the specific bits inside Addr, for |
| 62 // example, what parts of it point to a file number; only the code that has to |
| 63 // select a specific file would care about those specific bits. |
| 64 // |
| 65 // From a general point of view, an Addr has a total capacity of 2^24 entities, |
| 66 // in that it has 24 bits that can identify individual records. Note that the |
| 67 // address space is bigger for independent files (2^28), but that would not be |
| 68 // the general case. |
| 57 class NET_EXPORT_PRIVATE Addr { | 69 class NET_EXPORT_PRIVATE Addr { |
| 58 public: | 70 public: |
| 59 Addr() : value_(0) {} | 71 Addr() : value_(0) {} |
| 60 explicit Addr(CacheAddr address) : value_(address) {} | 72 explicit Addr(CacheAddr address) : value_(address) {} |
| 61 Addr(FileType file_type, int max_blocks, int block_file, int index) { | 73 Addr(FileType file_type, int max_blocks, int block_file, int index) { |
| 62 value_ = ((file_type << kFileTypeOffset) & kFileTypeMask) | | 74 value_ = ((file_type << kFileTypeOffset) & kFileTypeMask) | |
| 63 (((max_blocks - 1) << kNumBlocksOffset) & kNumBlocksMask) | | 75 (((max_blocks - 1) << kNumBlocksOffset) & kNumBlocksMask) | |
| 64 ((block_file << kFileSelectorOffset) & kFileSelectorMask) | | 76 ((block_file << kFileSelectorOffset) & kFileSelectorMask) | |
| 65 (index & kStartBlockMask) | kInitializedMask; | 77 (index & kStartBlockMask) | kInitializedMask; |
| 66 } | 78 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 } | 113 } |
| 102 | 114 |
| 103 bool operator==(Addr other) const { | 115 bool operator==(Addr other) const { |
| 104 return value_ == other.value_; | 116 return value_ == other.value_; |
| 105 } | 117 } |
| 106 | 118 |
| 107 bool operator!=(Addr other) const { | 119 bool operator!=(Addr other) const { |
| 108 return value_ != other.value_; | 120 return value_ != other.value_; |
| 109 } | 121 } |
| 110 | 122 |
| 111 static Addr FromEntryAddress(uint32 value) { | |
| 112 return Addr(kInitializedMask + (BLOCK_ENTRIES << kFileTypeOffset) + value); | |
| 113 } | |
| 114 | |
| 115 static Addr FromEvictedAddress(uint32 value) { | |
| 116 return Addr(kInitializedMask + (BLOCK_EVICTED << kFileTypeOffset) + value); | |
| 117 } | |
| 118 | |
| 119 static int BlockSizeForFileType(FileType file_type) { | 123 static int BlockSizeForFileType(FileType file_type) { |
| 120 switch (file_type) { | 124 switch (file_type) { |
| 121 case RANKINGS: | 125 case RANKINGS: |
| 122 return 36; | 126 return 36; |
| 123 case BLOCK_256: | 127 case BLOCK_256: |
| 124 return 256; | 128 return 256; |
| 125 case BLOCK_1K: | 129 case BLOCK_1K: |
| 126 return 1024; | 130 return 1024; |
| 127 case BLOCK_4K: | 131 case BLOCK_4K: |
| 128 return 4096; | 132 return 4096; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 static const uint32 kFileSelectorOffset = 16; | 179 static const uint32 kFileSelectorOffset = 16; |
| 176 static const uint32 kStartBlockMask = 0x0000FFFF; | 180 static const uint32 kStartBlockMask = 0x0000FFFF; |
| 177 static const uint32 kFileNameMask = 0x0FFFFFFF; | 181 static const uint32 kFileNameMask = 0x0FFFFFFF; |
| 178 | 182 |
| 179 CacheAddr value_; | 183 CacheAddr value_; |
| 180 }; | 184 }; |
| 181 | 185 |
| 182 } // namespace disk_cache | 186 } // namespace disk_cache |
| 183 | 187 |
| 184 #endif // NET_DISK_CACHE_ADDR_H_ | 188 #endif // NET_DISK_CACHE_ADDR_H_ |
| OLD | NEW |