mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Some steps towards defining a general datastore API.
This commit is contained in:
@@ -52,10 +52,12 @@ cxxprogram(
|
||||
"./fluxvisualiserwidget.cc",
|
||||
"./imagevisualiserwidget.cc",
|
||||
"./scene.cc",
|
||||
"./datastore.cc",
|
||||
"./globals.h",
|
||||
"./mainwindow.h",
|
||||
"./drivecomponent.h",
|
||||
"./formatcomponent.h",
|
||||
"./datastore.h",
|
||||
],
|
||||
cflags=["-fPIC"],
|
||||
ldflags=["$(QT5_EXTRA_LIBS)"],
|
||||
|
||||
84
src/gui2/datastore.cc
Normal file
84
src/gui2/datastore.cc
Normal file
@@ -0,0 +1,84 @@
|
||||
#include "lib/globals.h"
|
||||
#include "lib/image.h"
|
||||
#include "lib/flux.h"
|
||||
#include "lib/layout.h"
|
||||
#include "globals.h"
|
||||
#include "datastore.h"
|
||||
|
||||
class DatastoreImpl : public Datastore
|
||||
{
|
||||
W_OBJECT(DatastoreImpl);
|
||||
|
||||
public:
|
||||
DatastoreImpl(
|
||||
std::shared_ptr<Encoder>& encoder, std::shared_ptr<Decoder>& decoder):
|
||||
_encoder(encoder),
|
||||
_decoder(decoder)
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
void setDiskData(std::shared_ptr<const DiskFlux> diskData) override {}
|
||||
|
||||
void setTrackData(std::shared_ptr<const TrackFlux> trackData) override {
|
||||
key_t key = {trackData->trackInfo->physicalTrack, trackData->trackInfo->physicalSide};
|
||||
_tracks[key] = trackData;
|
||||
}
|
||||
|
||||
void setImageData(std::shared_ptr<const Image> imageData) override {
|
||||
clear();
|
||||
_loadedSectors = *imageData;
|
||||
}
|
||||
|
||||
void clear() override
|
||||
{
|
||||
_loadedSectors.clear();
|
||||
_changedSectors.clear();
|
||||
_tracks.clear();
|
||||
}
|
||||
|
||||
public:
|
||||
std::shared_ptr<const Sector> get(
|
||||
unsigned track, unsigned side, unsigned sectorId) override
|
||||
{
|
||||
auto it = _changedSectors.get(track, side, sectorId);
|
||||
if (it)
|
||||
return it;
|
||||
|
||||
return _loadedSectors.get(track, side, sectorId);
|
||||
}
|
||||
|
||||
std::shared_ptr<Sector> put(
|
||||
unsigned track, unsigned side, unsigned sectorId) override
|
||||
{
|
||||
return _changedSectors.put(track, side, sectorId);
|
||||
}
|
||||
|
||||
virtual bool isReadOnly() override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool needsFlushing() override
|
||||
{
|
||||
return !_changedSectors.empty();
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<Encoder> _encoder;
|
||||
std::shared_ptr<Decoder> _decoder;
|
||||
Image _loadedSectors;
|
||||
Image _changedSectors;
|
||||
|
||||
typedef std::pair<unsigned, unsigned> key_t;
|
||||
std::map<key_t, std::shared_ptr<const TrackFlux>> _tracks;
|
||||
};
|
||||
|
||||
W_OBJECT_IMPL(Datastore);
|
||||
W_OBJECT_IMPL(DatastoreImpl);
|
||||
|
||||
Datastore* Datastore::create(
|
||||
std::shared_ptr<Encoder>& encoder, std::shared_ptr<Decoder>& decoder)
|
||||
{
|
||||
return new DatastoreImpl(encoder, decoder);
|
||||
}
|
||||
25
src/gui2/datastore.h
Normal file
25
src/gui2/datastore.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include "lib/vfs/sectorinterface.h"
|
||||
|
||||
class Datastore : public SectorInterface, public QObject
|
||||
{
|
||||
W_OBJECT(Datastore);
|
||||
|
||||
public:
|
||||
virtual void setDiskData(std::shared_ptr<const DiskFlux> diskData) = 0;
|
||||
W_SLOT(setDiskData)
|
||||
|
||||
virtual void setTrackData(std::shared_ptr<const TrackFlux> trackData) = 0;
|
||||
W_SLOT(setTrackData)
|
||||
|
||||
virtual void setImageData(std::shared_ptr<const Image> imageData) = 0;
|
||||
W_SLOT(setImageData)
|
||||
|
||||
virtual void clear() = 0;
|
||||
W_SLOT(clear)
|
||||
|
||||
public:
|
||||
static Datastore* create(
|
||||
std::shared_ptr<Encoder>& encoder, std::shared_ptr<Decoder>& decoder);
|
||||
};
|
||||
@@ -11,10 +11,12 @@
|
||||
|
||||
class TrackFlux;
|
||||
class DiskFlux;
|
||||
class Image;
|
||||
|
||||
Q_DECLARE_METATYPE(const ConfigProto*)
|
||||
W_REGISTER_ARGTYPE(std::shared_ptr<const TrackFlux>)
|
||||
W_REGISTER_ARGTYPE(std::shared_ptr<const DiskFlux>)
|
||||
W_REGISTER_ARGTYPE(std::shared_ptr<const Image>)
|
||||
|
||||
extern QThreadPool workerThreadPool;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user