#ifndef WRITER_H #define WRITER_H #include "lib/data/locations.h" class Decoder; class Encoder; class DiskFlux; class FluxSink; class FluxSource; class FluxSourceIteratorHolder; class Fluxmap; class Image; class ImageReader; class ImageWriter; class TrackInfo; class TrackFlux; class TrackDataFlux; class Sector; struct BeginSpeedOperationLogMessage { }; struct EndSpeedOperationLogMessage { nanoseconds_t rotationalPeriod; }; struct TrackReadLogMessage { std::shared_ptr track; }; struct DiskReadLogMessage { std::shared_ptr disk; }; struct BeginReadOperationLogMessage { unsigned track; unsigned head; }; struct EndReadOperationLogMessage { std::shared_ptr trackDataFlux; std::set> sectors; }; struct BeginWriteOperationLogMessage { unsigned track; unsigned head; }; struct EndWriteOperationLogMessage { }; struct BeginOperationLogMessage { std::string message; }; struct EndOperationLogMessage { std::string message; }; struct OperationProgressLogMessage { unsigned progress; }; extern void measureDiskRotation(); extern void writeTracks(FluxSink& fluxSink, const std::function( std::shared_ptr& layout)> producer, std::vector>& locations); extern void writeTracksAndVerify(FluxSink& fluxSink, Encoder& encoder, FluxSource& fluxSource, Decoder& decoder, const Image& image, std::vector>& locations); extern void writeDiskCommand(const Image& image, Encoder& encoder, FluxSink& fluxSink, Decoder* decoder, FluxSource* fluxSource, const std::vector& locations); extern void writeDiskCommand(const Image& image, Encoder& encoder, FluxSink& fluxSink, Decoder* decoder = nullptr, FluxSource* fluxSource = nullptr); extern void writeRawDiskCommand(FluxSource& fluxSource, FluxSink& fluxSink); extern std::shared_ptr readAndDecodeTrack(FluxSource& fluxSource, Decoder& decoder, std::shared_ptr& layout); extern std::shared_ptr readDiskCommand( FluxSource& fluxsource, Decoder& decoder); extern void readDiskCommand( FluxSource& source, Decoder& decoder, ImageWriter& writer); #endif