1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/addr.h"
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/logging.h"
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace disk_cache {
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottint Addr::start_block() const {
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  DCHECK(is_block_file());
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return value_ & kStartBlockMask;
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottint Addr::num_blocks() const {
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  DCHECK(is_block_file() || !value_);
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return ((value_ & kNumBlocksMask) >> kNumBlocksOffset) + 1;
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool Addr::SetFileNumber(int file_number) {
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  DCHECK(is_separate_file());
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (file_number & ~kFileNameMask)
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return false;
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  value_ = kInitializedMask | file_number;
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return true;
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool Addr::SanityCheck() const {
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!is_initialized())
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return !value_;
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (((value_ & kFileTypeMask) >> kFileTypeOffset) > 4)
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return false;
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (is_separate_file())
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return true;
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const uint32 kReservedBitsMask = 0x0c000000;
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return !(value_ & kReservedBitsMask);
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace disk_cache
44