Convert the imagereader/writer to use proto enums rather than oneofs.

This commit is contained in:
David Given
2022-11-20 10:25:19 +01:00
parent 088bd9434d
commit 48540245b5
53 changed files with 191 additions and 169 deletions

View File

@@ -14,39 +14,39 @@
std::unique_ptr<ImageReader> ImageReader::create(const ImageReaderProto& config)
{
switch (config.format_case())
switch (config.type())
{
case ImageReaderProto::kDim:
case ImageReaderProto::DIM:
return ImageReader::createDimImageReader(config);
case ImageReaderProto::kD88:
case ImageReaderProto::D88:
return ImageReader::createD88ImageReader(config);
case ImageReaderProto::kFdi:
case ImageReaderProto::FDI:
return ImageReader::createFdiImageReader(config);
case ImageReaderProto::kImd:
case ImageReaderProto::IMD:
return ImageReader::createIMDImageReader(config);
case ImageReaderProto::kImg:
case ImageReaderProto::IMG:
return ImageReader::createImgImageReader(config);
case ImageReaderProto::kDiskcopy:
case ImageReaderProto::DISKCOPY:
return ImageReader::createDiskCopyImageReader(config);
case ImageReaderProto::kJv3:
case ImageReaderProto::JV3:
return ImageReader::createJv3ImageReader(config);
case ImageReaderProto::kD64:
case ImageReaderProto::D64:
return ImageReader::createD64ImageReader(config);
case ImageReaderProto::kNfd:
case ImageReaderProto::NFD:
return ImageReader::createNFDImageReader(config);
case ImageReaderProto::kNsi:
case ImageReaderProto::NSI:
return ImageReader::createNsiImageReader(config);
case ImageReaderProto::kTd0:
case ImageReaderProto::TD0:
return ImageReader::createTd0ImageReader(config);
default:
@@ -61,23 +61,23 @@ void ImageReader::updateConfigForFilename(
static const std::map<std::string, std::function<void(ImageReaderProto*)>>
formats = {
// clang-format off
{".adf", [](auto* proto) { proto->mutable_img(); }},
{".d64", [](auto* proto) { proto->mutable_d64(); }},
{".d81", [](auto* proto) { proto->mutable_img(); }},
{".d88", [](auto* proto) { proto->mutable_d88(); }},
{".dim", [](auto* proto) { proto->mutable_dim(); }},
{".diskcopy", [](auto* proto) { proto->mutable_diskcopy(); }},
{".dsk", [](auto* proto) { proto->mutable_img(); }},
{".fdi", [](auto* proto) { proto->mutable_fdi(); }},
{".imd", [](auto* proto) { proto->mutable_imd(); }},
{".img", [](auto* proto) { proto->mutable_img(); }},
{".jv3", [](auto* proto) { proto->mutable_jv3(); }},
{".nfd", [](auto* proto) { proto->mutable_nfd(); }},
{".nsi", [](auto* proto) { proto->mutable_nsi(); }},
{".st", [](auto* proto) { proto->mutable_img(); }},
{".td0", [](auto* proto) { proto->mutable_td0(); }},
{".vgi", [](auto* proto) { proto->mutable_img(); }},
{".xdf", [](auto* proto) { proto->mutable_img(); }},
{".adf", [](auto* proto) { proto->set_type(ImageReaderProto::IMG); }},
{".d64", [](auto* proto) { proto->set_type(ImageReaderProto::D64); }},
{".d81", [](auto* proto) { proto->set_type(ImageReaderProto::IMG); }},
{".d88", [](auto* proto) { proto->set_type(ImageReaderProto::D88); }},
{".dim", [](auto* proto) { proto->set_type(ImageReaderProto::DIM); }},
{".diskcopy", [](auto* proto) { proto->set_type(ImageReaderProto::DISKCOPY); }},
{".dsk", [](auto* proto) { proto->set_type(ImageReaderProto::IMG); }},
{".fdi", [](auto* proto) { proto->set_type(ImageReaderProto::FDI); }},
{".imd", [](auto* proto) { proto->set_type(ImageReaderProto::IMD); }},
{".img", [](auto* proto) { proto->set_type(ImageReaderProto::IMG); }},
{".jv3", [](auto* proto) { proto->set_type(ImageReaderProto::JV3); }},
{".nfd", [](auto* proto) { proto->set_type(ImageReaderProto::NFD); }},
{".nsi", [](auto* proto) { proto->set_type(ImageReaderProto::NSI); }},
{".st", [](auto* proto) { proto->set_type(ImageReaderProto::IMG); }},
{".td0", [](auto* proto) { proto->set_type(ImageReaderProto::TD0); }},
{".vgi", [](auto* proto) { proto->set_type(ImageReaderProto::IMG); }},
{".xdf", [](auto* proto) { proto->set_type(ImageReaderProto::IMG); }},
// clang-format on
};

View File

@@ -13,9 +13,9 @@ message Td0InputProto {}
message DimInputProto {}
message FdiInputProto {}
message D88InputProto {}
message NFDInputProto {}
message NfdInputProto {}
// NEXT_TAG: 14
// NEXT_TAG: 15
message ImageReaderProto
{
optional string filename = 1 [ (help) = "filename of input sector image" ];
@@ -24,18 +24,32 @@ message ImageReaderProto
default = false
];
oneof format
{
ImgInputOutputProto img = 2;
DiskCopyInputProto diskcopy = 3;
ImdInputProto imd = 4;
Jv3InputProto jv3 = 5;
D64InputProto d64 = 6;
NsiInputProto nsi = 7;
Td0InputProto td0 = 8;
DimInputProto dim = 9;
FdiInputProto fdi = 10;
D88InputProto d88 = 11;
NFDInputProto nfd = 12;
}
enum ImageReaderType {
NOT_SET = 0;
IMG = 1;
DISKCOPY = 2;
IMD = 3;
JV3 = 4;
D64 = 5;
NSI = 6;
TD0 = 7;
DIM = 8;
FDI = 9;
D88 = 10;
NFD = 11;
}
optional ImageReaderType type = 14 [default = NOT_SET, (help) = "input image type"];
optional ImgInputOutputProto img = 2;
optional DiskCopyInputProto diskcopy = 3;
optional ImdInputProto imd = 4;
optional Jv3InputProto jv3 = 5;
optional D64InputProto d64 = 6;
optional NsiInputProto nsi = 7;
optional Td0InputProto td0 = 8;
optional DimInputProto dim = 9;
optional FdiInputProto fdi = 10;
optional D88InputProto d88 = 11;
optional NfdInputProto nfd = 12;
}

View File

@@ -14,30 +14,30 @@
std::unique_ptr<ImageWriter> ImageWriter::create(const ImageWriterProto& config)
{
switch (config.format_case())
switch (config.type())
{
case ImageWriterProto::kImg:
case ImageWriterProto::IMG:
return ImageWriter::createImgImageWriter(config);
case ImageWriterProto::kD64:
case ImageWriterProto::D64:
return ImageWriter::createD64ImageWriter(config);
case ImageWriterProto::kLdbs:
case ImageWriterProto::LDBS:
return ImageWriter::createLDBSImageWriter(config);
case ImageWriterProto::kDiskcopy:
case ImageWriterProto::DISKCOPY:
return ImageWriter::createDiskCopyImageWriter(config);
case ImageWriterProto::kNsi:
case ImageWriterProto::NSI:
return ImageWriter::createNsiImageWriter(config);
case ImageWriterProto::kRaw:
case ImageWriterProto::RAW:
return ImageWriter::createRawImageWriter(config);
case ImageWriterProto::kD88:
case ImageWriterProto::D88:
return ImageWriter::createD88ImageWriter(config);
case ImageWriterProto::kImd:
case ImageWriterProto::IMD:
return ImageWriter::createImdImageWriter(config);
default:
@@ -52,20 +52,20 @@ void ImageWriter::updateConfigForFilename(
static const std::map<std::string, std::function<void(ImageWriterProto*)>>
formats = {
// clang-format off
{".adf", [](auto* proto) { proto->mutable_img(); }},
{".d64", [](auto* proto) { proto->mutable_d64(); }},
{".d81", [](auto* proto) { proto->mutable_img(); }},
{".d88", [](auto* proto) { proto->mutable_d88(); }},
{".diskcopy", [](auto* proto) { proto->mutable_diskcopy(); }},
{".dsk", [](auto* proto) { proto->mutable_img(); }},
{".img", [](auto* proto) { proto->mutable_img(); }},
{".imd", [](auto* proto) { proto->mutable_imd(); }},
{".ldbs", [](auto* proto) { proto->mutable_ldbs(); }},
{".nsi", [](auto* proto) { proto->mutable_nsi(); }},
{".raw", [](auto* proto) { proto->mutable_raw(); }},
{".st", [](auto* proto) { proto->mutable_img(); }},
{".vgi", [](auto* proto) { proto->mutable_img(); }},
{".xdf", [](auto* proto) { proto->mutable_img(); }},
{".adf", [](auto* proto) { proto->set_type(ImageWriterProto::IMG); }},
{".d64", [](auto* proto) { proto->set_type(ImageWriterProto::D64); }},
{".d81", [](auto* proto) { proto->set_type(ImageWriterProto::IMG); }},
{".d88", [](auto* proto) { proto->set_type(ImageWriterProto::D88); }},
{".diskcopy", [](auto* proto) { proto->set_type(ImageWriterProto::DISKCOPY); }},
{".dsk", [](auto* proto) { proto->set_type(ImageWriterProto::IMG); }},
{".img", [](auto* proto) { proto->set_type(ImageWriterProto::IMG); }},
{".imd", [](auto* proto) { proto->set_type(ImageWriterProto::IMD); }},
{".ldbs", [](auto* proto) { proto->set_type(ImageWriterProto::LDBS); }},
{".nsi", [](auto* proto) { proto->set_type(ImageWriterProto::NSI); }},
{".raw", [](auto* proto) { proto->set_type(ImageWriterProto::RAW); }},
{".st", [](auto* proto) { proto->set_type(ImageWriterProto::IMG); }},
{".vgi", [](auto* proto) { proto->set_type(ImageWriterProto::IMG); }},
{".xdf", [](auto* proto) { proto->set_type(ImageWriterProto::IMG); }},
// clang-format on
};

View File

@@ -63,24 +63,35 @@ message ImdOutputProto
optional string comment = 3 [ (help) = "comment to set in IMD file" ];
}
// NEXT_TAG: 11
// NEXT_TAG: 12
message ImageWriterProto
{
enum ImageWriterType {
NOT_SET = 0;
IMG = 1;
D64 = 2;
LDBS = 3;
DISKCOPY = 4;
NSI = 5;
RAW = 6;
D88 = 7;
IMD = 8;
}
optional string filename = 1 [ (help) = "filename of output sector image" ];
optional bool filesystem_sector_order = 10 [
(help) = "read/write sector image in filesystem order",
default = false
];
oneof format
{
ImgInputOutputProto img = 2;
D64OutputProto d64 = 3;
LDBSOutputProto ldbs = 4;
DiskCopyOutputProto diskcopy = 5;
NsiOutputProto nsi = 6;
RawOutputProto raw = 7;
D88OutputProto d88 = 8;
ImdOutputProto imd = 9;
}
optional ImageWriterType type = 11 [ default = NOT_SET, (help) = "image writer type" ];
optional ImgInputOutputProto img = 2;
optional D64OutputProto d64 = 3;
optional LDBSOutputProto ldbs = 4;
optional DiskCopyOutputProto diskcopy = 5;
optional NsiOutputProto nsi = 6;
optional RawOutputProto raw = 7;
optional D88OutputProto d88 = 8;
optional ImdOutputProto imd = 9;
}

View File

@@ -218,8 +218,7 @@ std::unique_ptr<Filesystem> Filesystem::createFilesystemFromConfig()
std::shared_ptr<Decoder> decoder;
std::shared_ptr<FluxSink> fluxSink;
std::shared_ptr<Encoder> encoder;
if (config.flux_source().type() !=
FluxSourceProto::NOT_SET)
if (config.flux_source().type() != FluxSourceProto::NOT_SET)
{
fluxSource = FluxSource::create(config.flux_source());
decoder = Decoder::create(config.decoder());
@@ -236,11 +235,9 @@ std::unique_ptr<Filesystem> Filesystem::createFilesystemFromConfig()
{
std::shared_ptr<ImageReader> reader;
std::shared_ptr<ImageWriter> writer;
if (config.image_reader().format_case() !=
ImageReaderProto::FORMAT_NOT_SET)
if (config.image_reader().type() != ImageReaderProto::NOT_SET)
reader = ImageReader::create(config.image_reader());
if (config.image_writer().format_case() !=
ImageWriterProto::FORMAT_NOT_SET)
if (config.image_writer().type() != ImageWriterProto::NOT_SET)
writer = ImageWriter::create(config.image_writer());
sectorInterface =

View File

@@ -3,7 +3,7 @@ is_extension: true
image_writer {
filename: "acornadfs.img"
img {}
type: IMG
}
layout {

View File

@@ -3,7 +3,7 @@ is_extension: true
image_writer {
filename: "acornadfs.img"
img {}
type: IMG
}
layout {

View File

@@ -7,12 +7,12 @@ drive {
image_reader {
filename: "micropolis.img"
img {}
type: IMG
}
image_writer {
filename: "micropolis.img"
img {}
type: IMG
}
layout {
@@ -41,12 +41,12 @@ option {
config {
image_reader {
filename: "micropolis.vgi"
img {}
type: IMG
}
image_writer {
filename: "micropolis.vgi"
img {}
type: IMG
}
layout {

View File

@@ -3,7 +3,7 @@ is_extension: true
image_writer {
filename: "mx.img"
img {}
type: IMG
}
layout {

View File

@@ -3,12 +3,12 @@ is_extension: true
image_reader {
filename: "northstar.nsi"
nsi {}
type: NSI
}
image_writer {
filename: "northstar.nsi"
nsi {}
type: NSI
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Acorn DFS 100kB/200kB 3.5" or 5.25" 40- or 80-track SS (ro)'
image_reader {
filename: "acorndfs.img"
img {}
type: IMG
}
image_writer {
filename: "acorndfs.img"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'AES Lanier "No Problem" 616kB 5.25" 77-track SSDD hard sectored (ro)'
image_writer {
filename: "aeslanier.img"
img {}
type: IMG
}
decoder {

View File

@@ -2,7 +2,7 @@ comment: 'Agat 840kB 5.25" 80-track DS (ro)'
image_writer {
filename: "agat.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Amiga 880kB 3.5" DSDD'
image_reader {
filename: "amiga.adf"
img {}
type: IMG
}
image_writer {
filename: "amiga.adf"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'Ampro 400kB/800kB 5.25" 40/80 track SSDD/DSDD (ro)'
image_writer {
filename: "ampro.img"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'Ampro 400kB/800kB 5.25" 40/80 track SSDD/DSDD (ro)'
image_writer {
filename: "ampro.img"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'Apple II 140kB DOS 3.3 5.25" 40 track SSSD'
image_reader {
filename: "apple2.img"
img {}
type: IMG
}
layout {
@@ -19,7 +19,7 @@ layout {
image_writer {
filename: "apple2.img"
img {}
type: IMG
}
decoder {

View File

@@ -4,12 +4,12 @@ include: '_atari'
image_reader {
filename: "atarist360.st"
img {}
type: IMG
}
image_writer {
filename: "atarist360.st"
img {}
type: IMG
}
layout {

View File

@@ -4,12 +4,12 @@ include: '_atari'
image_reader {
filename: "atarist370.st"
img {}
type: IMG
}
image_writer {
filename: "atarist370.st"
img {}
type: IMG
}
layout {

View File

@@ -4,12 +4,12 @@ include: '_atari'
image_reader {
filename: "atarist400.st"
img {}
type: IMG
}
image_writer {
filename: "atarist400.st"
img {}
type: IMG
}
layout {

View File

@@ -4,12 +4,12 @@ include: '_atari'
image_reader {
filename: "atarist410.st"
img {}
type: IMG
}
image_writer {
filename: "atarist410.st"
img {}
type: IMG
}
layout {

View File

@@ -4,12 +4,12 @@ include: '_atari'
image_reader {
filename: "atarist720.st"
img {}
type: IMG
}
image_writer {
filename: "atarist720.st"
img {}
type: IMG
}
layout {

View File

@@ -4,12 +4,12 @@ include: '_atari'
image_reader {
filename: "atarist740.st"
img {}
type: IMG
}
image_writer {
filename: "atarist740.st"
img {}
type: IMG
}
layout {

View File

@@ -4,12 +4,12 @@ include: '_atari'
image_reader {
filename: "atarist800.st"
img {}
type: IMG
}
image_writer {
filename: "atarist800.st"
img {}
type: IMG
}
layout {

View File

@@ -4,12 +4,12 @@ include: '_atari'
image_reader {
filename: "atarist820.st"
img {}
type: IMG
}
image_writer {
filename: "atarist820.st"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'BK 800kB 5.25"/3.5" 80-track 10-sector DSDD'
image_reader {
filename: "bk800.img"
img {}
type: IMG
}
image_writer {
filename: "bk800.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Brother 120kB 3.5" 39-track SS GCR'
image_reader {
filename: "brother120.img"
img {}
type: IMG
}
image_writer {
filename: "brother120.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Brother 240kB 3.5" 78-track SS GCR'
image_reader {
filename: "brother240.img"
img {}
type: IMG
}
image_writer {
filename: "brother240.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'CMD FD2000 1620kB 3.5" DSHD'
image_reader {
filename: "cmd_fd2000.img"
img {}
type: IMG
}
image_writer {
filename: "cmd_fd2000.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Commodore 1541 171kB/192kB 5.25" 35/40-track SS GCR'
image_reader {
filename: "commodore1541.d64"
d64 {}
type: D64
}
image_writer {
filename: "commodore1541.d64"
d64 {}
type: D64
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Commodore 1581 800kB 3.5" DSDD'
image_reader {
filename: "commodore1581.d81"
img {}
type: IMG
}
image_writer {
filename: "commodore1581.d81"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'VDS Eco1 1210kB 77-track mixed format DSHD (ro)'
image_writer {
filename: "eco1.img"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'Epson PF-10 40-track DS DD (ro)'
image_writer {
filename: "epsonpf10.img"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'Durango F85 461kB 5.25" 77-track SS (ro)'
image_writer {
filename: "f85.img"
img {}
type: IMG
}
decoder {

View File

@@ -2,7 +2,7 @@ comment: 'Brother FB-100 100kB 3.5" 40-track SS (ro)'
image_writer {
filename: "fb100.img"
img {}
type: IMG
}
decoder {

View File

@@ -2,7 +2,7 @@ comment: 'Hewlett-Packard 9121 264kB 3.5" SSDD'
image_reader {
filename: "hp9121.img"
img {}
type: IMG
}
layout {

View File

@@ -7,12 +7,12 @@ drive {
image_reader {
filename: "hplif770.img"
img {}
type: IMG
}
image_writer {
filename: "hplif770.img"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'PC 3.5"/5.25" autodetect double sided format'
image_writer {
filename: "ibm.img"
img {}
type: IMG
}
decoder {

View File

@@ -2,12 +2,12 @@ comment: 'PC 1200kB 5.25" 80-track 15-sector DSHD'
image_reader {
filename: "ibm1200.img"
img {}
type: IMG
}
image_writer {
filename: "ibm1200.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Japanese PC 1232kB 5.25"/3.5" 77-track 8-sector DSHD'
image_reader {
filename: "ibm1232.img"
img {}
type: IMG
}
image_writer {
filename: "ibm1232.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'PC 1440kB 3.5" 80-track 18-sector DSHD'
image_reader {
filename: "ibm1440.img"
img {}
type: IMG
}
image_writer {
filename: "ibm1440.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'PC 180kB 5.25" 40-track 9-sector SSDD'
image_reader {
filename: "ibm180.img"
img {}
type: IMG
}
image_writer {
filename: "ibm180.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'PC 360kB 5.25" 40-track 9-sector DSDD'
image_reader {
filename: "ibm360.img"
img {}
type: IMG
}
image_writer {
filename: "ibm360.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'PC 720kB 5.25"/3.5" 80-track 9-sector DSDD'
image_reader {
filename: "ibm720.img"
img {}
type: IMG
}
image_writer {
filename: "ibm720.img"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'ICL Model 30 263kB 34-track DSSD (ro)'
image_writer {
filename: "icl30.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Macintosh 400kB 3.5" SSDD GCR'
image_reader {
filename: "mac400.dsk"
img {}
type: IMG
}
image_writer {
filename: "mac400.dsk"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Macintosh 800kB 3.5" DSDD GCR'
image_reader {
filename: "mac800.dsk"
img {}
type: IMG
}
image_writer {
filename: "mac800.dsk"
img {}
type: IMG
}
layout {

View File

@@ -6,12 +6,12 @@ drive {
image_reader {
filename: "n88basic.img"
img {}
type: IMG
}
image_writer {
filename: "n88basic.img"
img {}
type: IMG
}
layout {

View File

@@ -6,12 +6,12 @@ drive {
image_reader {
filename: "rx50.img"
img {}
type: IMG
}
image_writer {
filename: "rx50.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Texas Instruments DS990 1126kB 8" DSSD'
image_reader {
filename: "tids990.img"
img {}
type: IMG
}
image_writer {
filename: "tids990.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Victor 9000 / Sirius One 1224kB DSHD GCR variable sector)'
image_reader {
filename: "victor9k_ds.img"
img {}
type: IMG
}
image_writer {
filename: "victor9k_ds.img"
img {}
type: IMG
}
layout {

View File

@@ -2,12 +2,12 @@ comment: 'Victor 9000 / Sirius One 612kB SSHD GCR variable sector)'
image_reader {
filename: "victor9k.img"
img {}
type: IMG
}
image_writer {
filename: "victor9k.img"
img {}
type: IMG
}
layout {

View File

@@ -2,7 +2,7 @@ comment: 'Zilog MCZ 320kB 8" 77-track SS hard-sectored (ro)'
image_writer {
filename: "zilogmcz.img"
img {}
type: IMG
}
decoder {