#include #include #include #include #include #include #include #include #include #include using namespace Device; using ProFUSE::Exception; using ProFUSE::POSIXException; #pragma mark - #pragma mark BlockCache BlockCache::BlockCache(BlockDevice *device) { _device = device; _blocks = device->blocks(); _readOnly = device->readOnly(); } BlockCache::~BlockCache() { delete _device; } void BlockCache::write(unsigned block, const void *bp) { void *address = acquire(block); std::memcpy(address, bp, 512); release(block, true); } void BlockCache::read(unsigned block, void *bp) { void *address = acquire(block); std::memcpy(bp, address, 512); release(block, false); } BlockCache *BlockCache::Create(BlockDevice *device) { if (!device) return NULL; return device->createBlockCache(); }