mirror of
https://github.com/ksherlock/profuse.git
synced 2025-01-09 00:30:45 +00:00
enforce smart pointers for block cache.
git-svn-id: https://profuse.googlecode.com/svn/branches/profuse_interim@344 aa027e90-d47c-11dd-86d7-074df07e0730
This commit is contained in:
parent
c44145f551
commit
c9b260b753
@ -58,6 +58,10 @@ using ProFUSE::POSIXException;
|
|||||||
//typedef std::vector<ConcreteBlockCache::Entry *>::iterator EntryIter;
|
//typedef std::vector<ConcreteBlockCache::Entry *>::iterator EntryIter;
|
||||||
|
|
||||||
|
|
||||||
|
BlockCachePointer ConcreteBlockCache::Create(BlockDevicePointer device, unsigned size)
|
||||||
|
{
|
||||||
|
return BlockCachePointer(new ConcreteBlockCache(device, size));
|
||||||
|
}
|
||||||
|
|
||||||
ConcreteBlockCache::ConcreteBlockCache(BlockDevicePointer device, unsigned size) :
|
ConcreteBlockCache::ConcreteBlockCache(BlockDevicePointer device, unsigned size) :
|
||||||
BlockCache(device)
|
BlockCache(device)
|
||||||
|
@ -9,7 +9,9 @@ namespace Device {
|
|||||||
|
|
||||||
class ConcreteBlockCache : public BlockCache {
|
class ConcreteBlockCache : public BlockCache {
|
||||||
public:
|
public:
|
||||||
ConcreteBlockCache(BlockDevicePointer device, unsigned size = 16);
|
|
||||||
|
static BlockCachePointer Create(BlockDevicePointer device, unsigned size = 16);
|
||||||
|
|
||||||
virtual ~ConcreteBlockCache();
|
virtual ~ConcreteBlockCache();
|
||||||
|
|
||||||
virtual void sync();
|
virtual void sync();
|
||||||
@ -21,8 +23,11 @@ public:
|
|||||||
virtual void markDirty(unsigned block);
|
virtual void markDirty(unsigned block);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
ConcreteBlockCache(BlockDevicePointer device, unsigned size);
|
||||||
|
|
||||||
struct Entry {
|
struct Entry {
|
||||||
unsigned block;
|
unsigned block;
|
||||||
unsigned count;
|
unsigned count;
|
||||||
|
@ -19,6 +19,11 @@ using namespace Device;
|
|||||||
using ProFUSE::Exception;
|
using ProFUSE::Exception;
|
||||||
using ProFUSE::POSIXException;
|
using ProFUSE::POSIXException;
|
||||||
|
|
||||||
|
BlockCachePointer MappedBlockCache::Create(BlockDevicePointer device, void *data)
|
||||||
|
{
|
||||||
|
return BlockCachePointer(new MappedBlockCache(device, data));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
MappedBlockCache::MappedBlockCache(BlockDevicePointer device, void *data) :
|
MappedBlockCache::MappedBlockCache(BlockDevicePointer device, void *data) :
|
||||||
BlockCache(device)
|
BlockCache(device)
|
||||||
|
@ -8,7 +8,8 @@ namespace Device {
|
|||||||
class MappedBlockCache : public BlockCache {
|
class MappedBlockCache : public BlockCache {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MappedBlockCache(BlockDevicePointer device, void *data);
|
static BlockCachePointer Create(BlockDevicePointer device, void *data);
|
||||||
|
|
||||||
virtual ~MappedBlockCache();
|
virtual ~MappedBlockCache();
|
||||||
|
|
||||||
virtual void sync();
|
virtual void sync();
|
||||||
@ -22,7 +23,9 @@ class MappedBlockCache : public BlockCache {
|
|||||||
virtual void markDirty(unsigned block);
|
virtual void markDirty(unsigned block);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
MappedBlockCache(BlockDevicePointer device, void *data);
|
||||||
|
|
||||||
void sync(unsigned block);
|
void sync(unsigned block);
|
||||||
|
|
||||||
uint8_t *_data;
|
uint8_t *_data;
|
||||||
|
@ -237,5 +237,5 @@ BlockCachePointer BlockDevice::createBlockCache()
|
|||||||
{
|
{
|
||||||
unsigned b = blocks();
|
unsigned b = blocks();
|
||||||
unsigned size = std::max(16u, b / 16);
|
unsigned size = std::max(16u, b / 16);
|
||||||
return BlockCachePointer(new ConcreteBlockCache(shared_from_this(), size));
|
return ConcreteBlockCache::Create(shared_from_this(), size);
|
||||||
}
|
}
|
||||||
|
@ -161,6 +161,6 @@ DavexDiskImage *DavexDiskImage::Create(const char *name, size_t blocks, const ch
|
|||||||
BlockCachePointer DavexDiskImage::createBlockCache()
|
BlockCachePointer DavexDiskImage::createBlockCache()
|
||||||
{
|
{
|
||||||
// need a smart pointer, but only have this....
|
// 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());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -224,5 +224,5 @@ BlockCachePointer DiskCopy42Image::createBlockCache()
|
|||||||
|
|
||||||
if (!readOnly()) _changed = true;
|
if (!readOnly()) _changed = true;
|
||||||
|
|
||||||
return BlockCachePointer(new MappedBlockCache(shared_from_this(), address()));
|
return MappedBlockCache::Create(shared_from_this(), address());
|
||||||
}
|
}
|
@ -140,7 +140,7 @@ void ProDOSOrderDiskImage::Validate(MappedFile *f)
|
|||||||
|
|
||||||
BlockCachePointer ProDOSOrderDiskImage::createBlockCache()
|
BlockCachePointer ProDOSOrderDiskImage::createBlockCache()
|
||||||
{
|
{
|
||||||
return BlockCachePointer(new MappedBlockCache(shared_from_this(), address()));
|
return MappedBlockCache::Create(shared_from_this(), address());
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
@ -145,7 +145,7 @@ BlockCachePointer UniversalDiskImage::createBlockCache()
|
|||||||
{
|
{
|
||||||
if (_format == 1)
|
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();
|
return DiskImage::createBlockCache();
|
||||||
|
Loading…
Reference in New Issue
Block a user