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 3 // found in the LICENSE file. 4 5 #include "net/disk_cache/blockfile/addr.h" 6 7 #include "base/logging.h" 8 9 namespace disk_cache { 10 start_block() const11int Addr::start_block() const { 12 DCHECK(is_block_file()); 13 return value_ & kStartBlockMask; 14 } 15 num_blocks() const16int Addr::num_blocks() const { 17 DCHECK(is_block_file() || !value_); 18 return ((value_ & kNumBlocksMask) >> kNumBlocksOffset) + 1; 19 } 20 SetFileNumber(int file_number)21bool Addr::SetFileNumber(int file_number) { 22 DCHECK(is_separate_file()); 23 if (file_number & ~kFileNameMask) 24 return false; 25 value_ = kInitializedMask | file_number; 26 return true; 27 } 28 SanityCheckV2() const29bool Addr::SanityCheckV2() const { 30 if (!is_initialized()) 31 return !value_; 32 33 if (file_type() > BLOCK_4K) 34 return false; 35 36 if (is_separate_file()) 37 return true; 38 39 return !reserved_bits(); 40 } 41 SanityCheckV3() const42bool Addr::SanityCheckV3() const { 43 if (!is_initialized()) 44 return !value_; 45 46 // For actual entries, SanityCheckForEntryV3 should be used. 47 if (file_type() > BLOCK_FILES) 48 return false; 49 50 if (is_separate_file()) 51 return true; 52 53 return !reserved_bits(); 54 } 55 SanityCheckForEntryV2() const56bool Addr::SanityCheckForEntryV2() const { 57 if (!SanityCheckV2() || !is_initialized()) 58 return false; 59 60 if (is_separate_file() || file_type() != BLOCK_256) 61 return false; 62 63 return true; 64 } 65 SanityCheckForEntryV3() const66bool Addr::SanityCheckForEntryV3() const { 67 if (!is_initialized()) 68 return false; 69 70 if (reserved_bits()) 71 return false; 72 73 if (file_type() != BLOCK_ENTRIES && file_type() != BLOCK_EVICTED) 74 return false; 75 76 if (num_blocks() != 1) 77 return false; 78 79 return true; 80 } 81 SanityCheckForRankings() const82bool Addr::SanityCheckForRankings() const { 83 if (!SanityCheckV2() || !is_initialized()) 84 return false; 85 86 if (is_separate_file() || file_type() != RANKINGS || num_blocks() != 1) 87 return false; 88 89 return true; 90 } 91 92 } // namespace disk_cache 93