diff --git a/Cache/ConcreteBlockCache.cpp b/Cache/ConcreteBlockCache.cpp index d18ccb3..5bf7ede 100644 --- a/Cache/ConcreteBlockCache.cpp +++ b/Cache/ConcreteBlockCache.cpp @@ -58,6 +58,10 @@ using ProFUSE::POSIXException; //typedef std::vector::iterator EntryIter; +BlockCachePointer ConcreteBlockCache::Create(BlockDevicePointer device, unsigned size) +{ + return BlockCachePointer(new ConcreteBlockCache(device, size)); +} ConcreteBlockCache::ConcreteBlockCache(BlockDevicePointer device, unsigned size) : BlockCache(device) diff --git a/Cache/ConcreteBlockCache.h b/Cache/ConcreteBlockCache.h index 8191be0..aead0e6 100644 --- a/Cache/ConcreteBlockCache.h +++ b/Cache/ConcreteBlockCache.h @@ -9,7 +9,9 @@ namespace Device { class ConcreteBlockCache : public BlockCache { public: - ConcreteBlockCache(BlockDevicePointer device, unsigned size = 16); + + static BlockCachePointer Create(BlockDevicePointer device, unsigned size = 16); + virtual ~ConcreteBlockCache(); virtual void sync(); @@ -21,8 +23,11 @@ public: virtual void markDirty(unsigned block); - private: + + + ConcreteBlockCache(BlockDevicePointer device, unsigned size); + struct Entry { unsigned block; unsigned count; diff --git a/Cache/MappedBlockCache.cpp b/Cache/MappedBlockCache.cpp index 46fb1b2..4a65fb1 100644 --- a/Cache/MappedBlockCache.cpp +++ b/Cache/MappedBlockCache.cpp @@ -19,6 +19,11 @@ using namespace Device; using ProFUSE::Exception; using ProFUSE::POSIXException; +BlockCachePointer MappedBlockCache::Create(BlockDevicePointer device, void *data) +{ + return BlockCachePointer(new MappedBlockCache(device, data)); +} + MappedBlockCache::MappedBlockCache(BlockDevicePointer device, void *data) : BlockCache(device) diff --git a/Cache/MappedBlockCache.h b/Cache/MappedBlockCache.h index c36ab3c..e02a854 100644 --- a/Cache/MappedBlockCache.h +++ b/Cache/MappedBlockCache.h @@ -8,7 +8,8 @@ namespace Device { class MappedBlockCache : public BlockCache { public: - MappedBlockCache(BlockDevicePointer device, void *data); + static BlockCachePointer Create(BlockDevicePointer device, void *data); + virtual ~MappedBlockCache(); virtual void sync(); @@ -22,7 +23,9 @@ class MappedBlockCache : public BlockCache { virtual void markDirty(unsigned block); private: - + + MappedBlockCache(BlockDevicePointer device, void *data); + void sync(unsigned block); uint8_t *_data; diff --git a/Device/BlockDevice.cpp b/Device/BlockDevice.cpp index de126c7..d421746 100644 --- a/Device/BlockDevice.cpp +++ b/Device/BlockDevice.cpp @@ -237,5 +237,5 @@ BlockCachePointer BlockDevice::createBlockCache() { unsigned b = blocks(); unsigned size = std::max(16u, b / 16); - return BlockCachePointer(new ConcreteBlockCache(shared_from_this(), size)); + return ConcreteBlockCache::Create(shared_from_this(), size); } diff --git a/Device/DavexDiskImage.cpp b/Device/DavexDiskImage.cpp index c4392fb..7600d5b 100644 --- a/Device/DavexDiskImage.cpp +++ b/Device/DavexDiskImage.cpp @@ -161,6 +161,6 @@ DavexDiskImage *DavexDiskImage::Create(const char *name, size_t blocks, const ch BlockCachePointer DavexDiskImage::createBlockCache() { // need a smart pointer, but only have this.... - return BlockCachePointer(new MappedBlockCache(shared_from_this(), 512 + (uint8_t *)address())); + return MappedBlockCache::Create(shared_from_this(), 512 + (uint8_t *)address()); } diff --git a/Device/DiskCopy42Image.cpp b/Device/DiskCopy42Image.cpp index 122017f..3d121f3 100644 --- a/Device/DiskCopy42Image.cpp +++ b/Device/DiskCopy42Image.cpp @@ -224,5 +224,5 @@ BlockCachePointer DiskCopy42Image::createBlockCache() if (!readOnly()) _changed = true; - return BlockCachePointer(new MappedBlockCache(shared_from_this(), address())); + return MappedBlockCache::Create(shared_from_this(), address()); } \ No newline at end of file diff --git a/Device/DiskImage.cpp b/Device/DiskImage.cpp index fe1761a..091d789 100644 --- a/Device/DiskImage.cpp +++ b/Device/DiskImage.cpp @@ -140,7 +140,7 @@ void ProDOSOrderDiskImage::Validate(MappedFile *f) BlockCachePointer ProDOSOrderDiskImage::createBlockCache() { - return BlockCachePointer(new MappedBlockCache(shared_from_this(), address())); + return MappedBlockCache::Create(shared_from_this(), address()); } #pragma mark - diff --git a/Device/UniversalDiskImage.cpp b/Device/UniversalDiskImage.cpp index 4464e88..1d7014e 100644 --- a/Device/UniversalDiskImage.cpp +++ b/Device/UniversalDiskImage.cpp @@ -145,7 +145,7 @@ BlockCachePointer UniversalDiskImage::createBlockCache() { if (_format == 1) { - return BlockCachePointer(new MappedBlockCache(shared_from_this(), _dataOffset + (uint8_t *)address())); + return MappedBlockCache::Create(shared_from_this(), _dataOffset + (uint8_t *)address()); } return DiskImage::createBlockCache();