13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 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// See net/disk_cache/disk_cache.h for the public interface of the cache. 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_DISK_CACHE_MAPPED_FILE_H_ 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_DISK_CACHE_MAPPED_FILE_H_ 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/disk_format.h" 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/file.h" 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/file_block.h" 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass FilePath; 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace disk_cache { 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This class implements a memory mapped file used to access block-files. The 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// idea is that the header and bitmap will be memory mapped all the time, and 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// the actual data for the blocks will be access asynchronously (most of the 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// time). 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass MappedFile : public File { 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MappedFile() : File(true), init_(false) {} 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Performs object initialization. name is the file to use, and size is the 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // ammount of data to memory map from th efile. If size is 0, the whole file 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // will be mapped in memory. 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void* Init(const FilePath& name, size_t size); 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void* buffer() const { 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return buffer_; 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Loads or stores a given block from the backing file (synchronously). 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool Load(const FileBlock* block); 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool Store(const FileBlock* block); 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual ~MappedFile(); 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool init_; 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if defined(OS_WIN) 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott HANDLE section_; 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void* buffer_; // Address of the memory mapped buffer. 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott size_t view_size_; // Size of the memory pointed by buffer_. 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DISALLOW_COPY_AND_ASSIGN(MappedFile); 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace disk_cache 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NET_DISK_CACHE_MAPPED_FILE_H_ 56