// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This is an internal class that handles the address of a cache record. // See net/disk_cache/disk_cache.h for the public interface of the cache. #ifndef NET_DISK_CACHE_BLOCKFILE_ADDR_H_ #define NET_DISK_CACHE_BLOCKFILE_ADDR_H_ #include <stddef.h> #include <stdint.h> #include "base/notreached.h" #include "net/base/net_export.h" #include "net/disk_cache/blockfile/disk_format_base.h" namespace disk_cache { enum FileType { … }; const int kMaxBlockSize = …; const int16_t kMaxBlockFile = …; const int kMaxNumBlocks = …; const int16_t kFirstAdditionalBlockFile = …; // Defines a storage address for a cache record // // Header: // 1000 0000 0000 0000 0000 0000 0000 0000 : initialized bit // 0111 0000 0000 0000 0000 0000 0000 0000 : file type // // File type values: // 0 = separate file on disk // 1 = rankings block file // 2 = 256 byte block file // 3 = 1k byte block file // 4 = 4k byte block file // 5 = external files block file // 6 = active entries block file // 7 = evicted entries block file // // If separate file: // 0000 1111 1111 1111 1111 1111 1111 1111 : file# 0 - 268,435,456 (2^28) // // If block file: // 0000 1100 0000 0000 0000 0000 0000 0000 : reserved bits // 0000 0011 0000 0000 0000 0000 0000 0000 : number of contiguous blocks 1-4 // 0000 0000 1111 1111 0000 0000 0000 0000 : file selector 0 - 255 // 0000 0000 0000 0000 1111 1111 1111 1111 : block# 0 - 65,535 (2^16) // // Note that an Addr can be used to "point" to a variety of different objects, // from a given type of entry to random blobs of data. Conceptually, an Addr is // just a number that someone can inspect to find out how to locate the desired // record. Most users will not care about the specific bits inside Addr, for // example, what parts of it point to a file number; only the code that has to // select a specific file would care about those specific bits. // // From a general point of view, an Addr has a total capacity of 2^24 entities, // in that it has 24 bits that can identify individual records. Note that the // address space is bigger for independent files (2^28), but that would not be // the general case. class NET_EXPORT_PRIVATE Addr { … }; } // namespace disk_cache #endif // NET_DISK_CACHE_BLOCKFILE_ADDR_H_