| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/disk_cache/blockfile/addr.h" |
| |
| #include "base/logging.h" |
| |
| namespace disk_cache { |
| |
| int Addr::start_block() const { |
| DCHECK(is_block_file()); |
| return value_ & kStartBlockMask; |
| } |
| |
| int Addr::num_blocks() const { |
| DCHECK(is_block_file() || !value_); |
| return ((value_ & kNumBlocksMask) >> kNumBlocksOffset) + 1; |
| } |
| |
| bool Addr::SetFileNumber(int file_number) { |
| DCHECK(is_separate_file()); |
| if (file_number & ~kFileNameMask) |
| return false; |
| value_ = kInitializedMask | file_number; |
| return true; |
| } |
| |
| bool Addr::SanityCheck() const { |
| if (!is_initialized()) |
| return !value_; |
| |
| if (file_type() > BLOCK_4K) |
| return false; |
| |
| if (is_separate_file()) |
| return true; |
| |
| return !reserved_bits(); |
| } |
| |
| bool Addr::SanityCheckForEntry() const { |
| if (!SanityCheck() || !is_initialized()) |
| return false; |
| |
| if (is_separate_file() || file_type() != BLOCK_256) |
| return false; |
| |
| return true; |
| } |
| |
| bool Addr::SanityCheckForRankings() const { |
| if (!SanityCheck() || !is_initialized()) |
| return false; |
| |
| if (is_separate_file() || file_type() != RANKINGS || num_blocks() != 1) |
| return false; |
| |
| return true; |
| } |
| |
| } // namespace disk_cache |