123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef _nsDiskCacheBlockFile_h_
- #define _nsDiskCacheBlockFile_h_
- #include "mozilla/MemoryReporting.h"
- #include "nsIFile.h"
- #include "nsDiskCache.h"
- /******************************************************************************
- * nsDiskCacheBlockFile
- *
- * The structure of a cache block file is a 4096 bytes bit map, followed by
- * some number of blocks of mBlockSize. The creator of a
- * nsDiskCacheBlockFile object must provide the block size for a given file.
- *
- *****************************************************************************/
- class nsDiskCacheBlockFile {
- public:
- nsDiskCacheBlockFile()
- : mFD(nullptr)
- , mBitMap(nullptr)
- , mBlockSize(0)
- , mBitMapWords(0)
- , mFileSize(0)
- , mBitMapDirty(false)
- {}
- ~nsDiskCacheBlockFile() { (void) Close(true); }
-
- nsresult Open( nsIFile * blockFile, uint32_t blockSize,
- uint32_t bitMapSize, nsDiskCache::CorruptCacheInfo * corruptInfo);
- nsresult Close(bool flush);
- /*
- * Trim
- * Truncates the block file to the end of the last allocated block.
- */
- nsresult Trim() { return nsDiskCache::Truncate(mFD, CalcBlockFileSize()); }
- nsresult DeallocateBlocks( int32_t startBlock, int32_t numBlocks);
- nsresult WriteBlocks( void * buffer, uint32_t size, int32_t numBlocks,
- int32_t * startBlock);
- nsresult ReadBlocks( void * buffer, int32_t startBlock, int32_t numBlocks,
- int32_t * bytesRead);
- size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf);
- private:
- nsresult FlushBitMap();
- int32_t AllocateBlocks( int32_t numBlocks);
- nsresult VerifyAllocation( int32_t startBlock, int32_t numBLocks);
- uint32_t CalcBlockFileSize();
- bool Write(int32_t offset, const void *buf, int32_t amount);
- /**
- * Data members
- */
- PRFileDesc * mFD;
- uint32_t * mBitMap; // XXX future: array of bit map blocks
- uint32_t mBlockSize;
- uint32_t mBitMapWords;
- int32_t mFileSize;
- bool mBitMapDirty;
- };
- #endif // _nsDiskCacheBlockFile_h_
|