// 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/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 (((value_ & kFileTypeMask) >> kFileTypeOffset) > 4) return false; if (is_separate_file()) return true; const uint32 kReservedBitsMask = 0x0c000000; return !(value_ & kReservedBitsMask); } 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