From f0ec8bd5b91b8dd58780e8a3ca779acde04726e2 Mon Sep 17 00:00:00 2001 From: David Given Date: Fri, 26 Aug 2022 00:43:01 +0200 Subject: [PATCH] More SectorInterface refactoring. --- lib/build.mk | 1 + lib/vfs/imagesectorinterface.cc | 31 +++++++++++++++++++++++++++++++ lib/vfs/sectorinterface.h | 22 ++-------------------- src/fe-getfileinfo.cc | 2 +- src/fe-ls.cc | 2 +- 5 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 lib/vfs/imagesectorinterface.cc diff --git a/lib/build.mk b/lib/build.mk index 11deaf57..aaacfa5c 100644 --- a/lib/build.mk +++ b/lib/build.mk @@ -67,6 +67,7 @@ LIBFLUXENGINE_SRCS = \ lib/vfs/brother120fs.cc \ lib/vfs/acorndfs.cc \ lib/vfs/vfs.cc \ + lib/vfs/imagesectorinterface.cc \ LIBFLUXENGINE_OBJS = $(patsubst %.cc, $(OBJDIR)/%.o, $(LIBFLUXENGINE_SRCS)) OBJS += $(LIBFLUXENGINE_OBJS) diff --git a/lib/vfs/imagesectorinterface.cc b/lib/vfs/imagesectorinterface.cc new file mode 100644 index 00000000..d4408f3d --- /dev/null +++ b/lib/vfs/imagesectorinterface.cc @@ -0,0 +1,31 @@ +#include "lib/globals.h" +#include "lib/vfs/sectorinterface.h" +#include "lib/image.h" + +class ImageSectorInterface : public SectorInterface +{ +public: + ImageSectorInterface(std::shared_ptr image): + _image(image) + {} + +public: + std::shared_ptr get(unsigned track, unsigned side, unsigned sectorId) + { + return _image->get(track, side, sectorId); + } + + std::shared_ptr put(unsigned track, unsigned side, unsigned sectorId) + { + return _image->put(track, side, sectorId); + } + +private: + std::shared_ptr _image; +}; + +std::unique_ptr SectorInterface::createImageSectorInterface(std::shared_ptr image) +{ + return std::make_unique(image); +} + diff --git a/lib/vfs/sectorinterface.h b/lib/vfs/sectorinterface.h index 9e9b889e..419adf7a 100644 --- a/lib/vfs/sectorinterface.h +++ b/lib/vfs/sectorinterface.h @@ -2,6 +2,7 @@ #define SECTORINTERFACE_H class Image; +class Sector; class SectorInterface { @@ -10,28 +11,9 @@ public: virtual std::shared_ptr put(unsigned track, unsigned side, unsigned sectorId) = 0; virtual void flush() {} -}; - -class ImageSectorInterface : public SectorInterface -{ -public: - ImageSectorInterface(std::shared_ptr image): - _image(image) - {} public: - std::shared_ptr get(unsigned track, unsigned side, unsigned sectorId) - { - return _image->get(track, side, sectorId); - } - - std::shared_ptr put(unsigned track, unsigned side, unsigned sectorId) - { - return _image->put(track, side, sectorId); - } - -private: - std::shared_ptr _image; + static std::unique_ptr createImageSectorInterface(std::shared_ptr image); }; #endif diff --git a/src/fe-getfileinfo.cc b/src/fe-getfileinfo.cc index a1dfe79f..f0c0d6f9 100644 --- a/src/fe-getfileinfo.cc +++ b/src/fe-getfileinfo.cc @@ -51,7 +51,7 @@ int mainGetFileInfo(int argc, const char* argv[]) auto reader = ImageReader::create(config.image_reader()); std::shared_ptr image(std::move(reader->readImage())); - sectorInterface = std::make_shared(image); + sectorInterface = SectorInterface::createImageSectorInterface(image); auto filesystem = Filesystem::createFilesystem(config.filesystem(), sectorInterface); diff --git a/src/fe-ls.cc b/src/fe-ls.cc index d60ada36..9b31c3f0 100644 --- a/src/fe-ls.cc +++ b/src/fe-ls.cc @@ -60,7 +60,7 @@ int mainLs(int argc, const char* argv[]) auto reader = ImageReader::create(config.image_reader()); std::shared_ptr image(std::move(reader->readImage())); - sectorInterface = std::make_shared(image); + sectorInterface = SectorInterface::createImageSectorInterface(image); auto filesystem = Filesystem::createFilesystem(config.filesystem(), sectorInterface);