Split the dependency so that the encoders/decoders don't depend on arch.

This commit is contained in:
David Given
2024-10-16 21:00:48 +02:00
parent ea35551b9d
commit 6d3969ab79
10 changed files with 133 additions and 121 deletions

View File

@@ -4,25 +4,6 @@
#include "lib/config/config.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "arch/agat/agat.h"
#include "arch/aeslanier/aeslanier.h"
#include "arch/amiga/amiga.h"
#include "arch/apple2/apple2.h"
#include "arch/brother/brother.h"
#include "arch/c64/c64.h"
#include "arch/f85/f85.h"
#include "arch/fb100/fb100.h"
#include "arch/ibm/ibm.h"
#include "arch/macintosh/macintosh.h"
#include "arch/micropolis/micropolis.h"
#include "arch/mx/mx.h"
#include "arch/northstar/northstar.h"
#include "arch/rolandd20/rolandd20.h"
#include "arch/smaky6/smaky6.h"
#include "arch/tartu/tartu.h"
#include "arch/tids990/tids990.h"
#include "arch/victor9k/victor9k.h"
#include "arch/zilogmcz/zilogmcz.h"
#include "lib/data/fluxmapreader.h"
#include "lib/data/flux.h"
#include "protocol.h"
@@ -33,45 +14,6 @@
#include "lib/data/layout.h"
#include <numeric>
std::unique_ptr<Decoder> Decoder::create(Config& config)
{
if (!config.hasDecoder())
error("no decoder configured");
return create(config->decoder());
}
std::unique_ptr<Decoder> Decoder::create(const DecoderProto& config)
{
static const std::map<int,
std::function<std::unique_ptr<Decoder>(const DecoderProto&)>>
decoders = {
{DecoderProto::kAgat, createAgatDecoder },
{DecoderProto::kAeslanier, createAesLanierDecoder },
{DecoderProto::kAmiga, createAmigaDecoder },
{DecoderProto::kApple2, createApple2Decoder },
{DecoderProto::kBrother, createBrotherDecoder },
{DecoderProto::kC64, createCommodore64Decoder},
{DecoderProto::kF85, createDurangoF85Decoder },
{DecoderProto::kFb100, createFb100Decoder },
{DecoderProto::kIbm, createIbmDecoder },
{DecoderProto::kMacintosh, createMacintoshDecoder },
{DecoderProto::kMicropolis, createMicropolisDecoder },
{DecoderProto::kMx, createMxDecoder },
{DecoderProto::kNorthstar, createNorthstarDecoder },
{DecoderProto::kRolandd20, createRolandD20Decoder },
{DecoderProto::kSmaky6, createSmaky6Decoder },
{DecoderProto::kTartu, createTartuDecoder },
{DecoderProto::kTids990, createTids990Decoder },
{DecoderProto::kVictor9K, createVictor9kDecoder },
{DecoderProto::kZilogmcz, createZilogMczDecoder },
};
auto decoder = decoders.find(config.format_case());
if (decoder == decoders.end())
error("no decoder specified");
return (decoder->second)(config);
}
std::shared_ptr<TrackDataFlux> Decoder::decodeToSectors(
std::shared_ptr<const Fluxmap> fluxmap,

View File

@@ -3,57 +3,12 @@
#include "lib/data/fluxmap.h"
#include "lib/decoders/decoders.h"
#include "lib/encoders/encoders.h"
#include "arch/agat/agat.h"
#include "arch/amiga/amiga.h"
#include "arch/apple2/apple2.h"
#include "arch/brother/brother.h"
#include "arch/c64/c64.h"
#include "arch/ibm/ibm.h"
#include "arch/macintosh/macintosh.h"
#include "arch/micropolis/micropolis.h"
#include "arch/northstar/northstar.h"
#include "arch/tartu/tartu.h"
#include "arch/tids990/tids990.h"
#include "arch/victor9k/victor9k.h"
#include "lib/encoders/encoders.pb.h"
#include "lib/config/proto.h"
#include "lib/data/layout.h"
#include "lib/data/image.h"
#include "protocol.h"
std::unique_ptr<Encoder> Encoder::create(Config& config)
{
if (!config.hasEncoder())
error("no encoder configured");
return create(config->encoder());
}
std::unique_ptr<Encoder> Encoder::create(const EncoderProto& config)
{
static const std::map<int,
std::function<std::unique_ptr<Encoder>(const EncoderProto&)>>
encoders = {
{EncoderProto::kAgat, createAgatEncoder },
{EncoderProto::kAmiga, createAmigaEncoder },
{EncoderProto::kApple2, createApple2Encoder },
{EncoderProto::kBrother, createBrotherEncoder },
{EncoderProto::kC64, createCommodore64Encoder},
{EncoderProto::kIbm, createIbmEncoder },
{EncoderProto::kMacintosh, createMacintoshEncoder },
{EncoderProto::kMicropolis, createMicropolisEncoder },
{EncoderProto::kNorthstar, createNorthstarEncoder },
{EncoderProto::kTartu, createTartuEncoder },
{EncoderProto::kTids990, createTids990Encoder },
{EncoderProto::kVictor9K, createVictor9kEncoder },
};
auto encoder = encoders.find(config.format_case());
if (encoder == encoders.end())
error("no encoder specified");
return (encoder->second)(config);
}
nanoseconds_t Encoder::calculatePhysicalClockPeriod(
nanoseconds_t targetClockPeriod, nanoseconds_t targetRotationalPeriod)
{

View File

@@ -16,7 +16,6 @@ public:
virtual ~Encoder() {}
static std::unique_ptr<Encoder> create(Config& config);
static std::unique_ptr<Encoder> create(const EncoderProto& config);
public:
virtual std::shared_ptr<const Sector> getSector(

View File

@@ -15,6 +15,7 @@
#include "lib/encoders/encoders.h"
#include "lib/config/config.pb.h"
#include "lib/core/utils.h"
#include "arch/arch.h"
Path::Path(const std::vector<std::string> other):
std::vector<std::string>(other)
@@ -244,12 +245,12 @@ std::unique_ptr<Filesystem> Filesystem::createFilesystemFromConfig()
if (globalConfig().hasFluxSource())
{
fluxSource = FluxSource::create(globalConfig());
decoder = Decoder::create(globalConfig());
decoder = Arch::createDecoder(globalConfig());
}
if (globalConfig()->flux_sink().type() == FLUXTYPE_DRIVE)
{
fluxSink = FluxSink::create(globalConfig());
encoder = Encoder::create(globalConfig());
encoder = Arch::createEncoder(globalConfig());
}
sectorInterface = SectorInterface::createFluxSectorInterface(
fluxSource, fluxSink, encoder, decoder);