| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #ifndef NET_DISK_CACHE_BLOCKFILE_BITMAP_H_ | 5 #ifndef NET_DISK_CACHE_BLOCKFILE_BITMAP_H_ |
| 6 #define NET_DISK_CACHE_BLOCKFILE_BITMAP_H_ | 6 #define NET_DISK_CACHE_BLOCKFILE_BITMAP_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "net/base/net_export.h" | 9 #include "net/base/net_export.h" |
| 10 | 10 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 bool FindNextBit(int* index, int limit, bool value) const; | 88 bool FindNextBit(int* index, int limit, bool value) const; |
| 89 | 89 |
| 90 // Finds the first offset >= *|index| and < |limit| that has its bit set. | 90 // Finds the first offset >= *|index| and < |limit| that has its bit set. |
| 91 // See FindNextBit() for more info. | 91 // See FindNextBit() for more info. |
| 92 bool FindNextSetBitBeforeLimit(int* index, int limit) const { | 92 bool FindNextSetBitBeforeLimit(int* index, int limit) const { |
| 93 return FindNextBit(index, limit, true); | 93 return FindNextBit(index, limit, true); |
| 94 } | 94 } |
| 95 | 95 |
| 96 // Finds the first offset >= *|index| that has its bit set. | 96 // Finds the first offset >= *|index| that has its bit set. |
| 97 // See FindNextBit() for more info. | 97 // See FindNextBit() for more info. |
| 98 bool FindNextSetBit(int *index) const { | 98 bool FindNextSetBit(int* index) const { |
| 99 return FindNextSetBitBeforeLimit(index, num_bits_); | 99 return FindNextSetBitBeforeLimit(index, num_bits_); |
| 100 } | 100 } |
| 101 | 101 |
| 102 // Scans bits starting at bit *|index|, looking for a bit set to |value|. If | 102 // Scans bits starting at bit *|index|, looking for a bit set to |value|. If |
| 103 // it finds that bit before reaching bit index |limit|, sets *|index| to the | 103 // it finds that bit before reaching bit index |limit|, sets *|index| to the |
| 104 // bit index and then counts the number of consecutive bits set to |value| | 104 // bit index and then counts the number of consecutive bits set to |value| |
| 105 // (before reaching |limit|), and returns that count. If no bit is found | 105 // (before reaching |limit|), and returns that count. If no bit is found |
| 106 // returns 0. Requires |limit| <= Size(). | 106 // returns 0. Requires |limit| <= Size(). |
| 107 int FindBits(int* index, int limit, bool value) const; | 107 int FindBits(int* index, int limit, bool value) const; |
| 108 | 108 |
| 109 // Returns number of allocated words required for a bitmap of size |num_bits|. | 109 // Returns number of allocated words required for a bitmap of size |num_bits|. |
| 110 static int RequiredArraySize(int num_bits) { | 110 static int RequiredArraySize(int num_bits) { |
| 111 // Force at least one allocated word. | 111 // Force at least one allocated word. |
| 112 if (num_bits <= kIntBits) | 112 if (num_bits <= kIntBits) |
| 113 return 1; | 113 return 1; |
| 114 | 114 |
| 115 return (num_bits + kIntBits - 1) >> kLogIntBits; | 115 return (num_bits + kIntBits - 1) >> kLogIntBits; |
| 116 } | 116 } |
| 117 | 117 |
| 118 private: | 118 private: |
| 119 static const int kIntBits = sizeof(uint32) * 8; | 119 static const int kIntBits = sizeof(uint32) * 8; |
| 120 static const int kLogIntBits = 5; // 2^5 == 32 bits per word. | 120 static const int kLogIntBits = 5; // 2^5 == 32 bits per word. |
| 121 | 121 |
| 122 // Sets |len| bits from |start| to |value|. All the bits to be set should be | 122 // Sets |len| bits from |start| to |value|. All the bits to be set should be |
| 123 // stored in the same word, and len < kIntBits. | 123 // stored in the same word, and len < kIntBits. |
| 124 void SetWordBits(int start, int len, bool value); | 124 void SetWordBits(int start, int len, bool value); |
| 125 | 125 |
| 126 uint32* map_; // The bitmap. | 126 uint32* map_; // The bitmap. |
| 127 int num_bits_; // The upper bound of the bitmap. | 127 int num_bits_; // The upper bound of the bitmap. |
| 128 int array_size_; // The physical size (in uint32s) of the bitmap. | 128 int array_size_; // The physical size (in uint32s) of the bitmap. |
| 129 bool alloc_; // Whether or not we allocated the memory. | 129 bool alloc_; // Whether or not we allocated the memory. |
| 130 | 130 |
| 131 DISALLOW_COPY_AND_ASSIGN(Bitmap); | 131 DISALLOW_COPY_AND_ASSIGN(Bitmap); |
| 132 }; | 132 }; |
| 133 | 133 |
| 134 } // namespace disk_cache | 134 } // namespace disk_cache |
| 135 | 135 |
| 136 #endif // NET_DISK_CACHE_BLOCKFILE_BITMAP_H_ | 136 #endif // NET_DISK_CACHE_BLOCKFILE_BITMAP_H_ |
| OLD | NEW |