1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "net/disk_cache/blockfile/addr.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include "base/check.h" 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker namespace disk_cache { 10*6777b538SAndroid Build Coastguard Worker start_block() const11*6777b538SAndroid Build Coastguard Workerint Addr::start_block() const { 12*6777b538SAndroid Build Coastguard Worker DCHECK(is_block_file()); 13*6777b538SAndroid Build Coastguard Worker return value_ & kStartBlockMask; 14*6777b538SAndroid Build Coastguard Worker } 15*6777b538SAndroid Build Coastguard Worker num_blocks() const16*6777b538SAndroid Build Coastguard Workerint Addr::num_blocks() const { 17*6777b538SAndroid Build Coastguard Worker DCHECK(is_block_file() || !value_); 18*6777b538SAndroid Build Coastguard Worker return ((value_ & kNumBlocksMask) >> kNumBlocksOffset) + 1; 19*6777b538SAndroid Build Coastguard Worker } 20*6777b538SAndroid Build Coastguard Worker SetFileNumber(int file_number)21*6777b538SAndroid Build Coastguard Workerbool Addr::SetFileNumber(int file_number) { 22*6777b538SAndroid Build Coastguard Worker DCHECK(is_separate_file()); 23*6777b538SAndroid Build Coastguard Worker if (file_number & ~kFileNameMask) 24*6777b538SAndroid Build Coastguard Worker return false; 25*6777b538SAndroid Build Coastguard Worker value_ = kInitializedMask | file_number; 26*6777b538SAndroid Build Coastguard Worker return true; 27*6777b538SAndroid Build Coastguard Worker } 28*6777b538SAndroid Build Coastguard Worker SanityCheck() const29*6777b538SAndroid Build Coastguard Workerbool Addr::SanityCheck() const { 30*6777b538SAndroid Build Coastguard Worker if (!is_initialized()) 31*6777b538SAndroid Build Coastguard Worker return !value_; 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker if (file_type() > BLOCK_4K) 34*6777b538SAndroid Build Coastguard Worker return false; 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker if (is_separate_file()) 37*6777b538SAndroid Build Coastguard Worker return true; 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker return !reserved_bits(); 40*6777b538SAndroid Build Coastguard Worker } 41*6777b538SAndroid Build Coastguard Worker SanityCheckForEntry() const42*6777b538SAndroid Build Coastguard Workerbool Addr::SanityCheckForEntry() const { 43*6777b538SAndroid Build Coastguard Worker if (!SanityCheck() || !is_initialized()) 44*6777b538SAndroid Build Coastguard Worker return false; 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker if (is_separate_file() || file_type() != BLOCK_256) 47*6777b538SAndroid Build Coastguard Worker return false; 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker return true; 50*6777b538SAndroid Build Coastguard Worker } 51*6777b538SAndroid Build Coastguard Worker SanityCheckForRankings() const52*6777b538SAndroid Build Coastguard Workerbool Addr::SanityCheckForRankings() const { 53*6777b538SAndroid Build Coastguard Worker if (!SanityCheck() || !is_initialized()) 54*6777b538SAndroid Build Coastguard Worker return false; 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker if (is_separate_file() || file_type() != RANKINGS || num_blocks() != 1) 57*6777b538SAndroid Build Coastguard Worker return false; 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker return true; 60*6777b538SAndroid Build Coastguard Worker } 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker } // namespace disk_cache 63