MCPcopy Create free account
hub / github.com/davidgiven/fluxengine / writeImage

Method writeImage

lib/imagewriter/rawimagewriter.cc:18–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

16 RawImageWriter(const ImageWriterProto& config): ImageWriter(config) {}
17
18 void writeImage(const Image& image) override
19 {
20 const Geometry& geometry = image.getGeometry();
21
22 size_t trackSize = geometry.numSectors * geometry.sectorSize;
23
24 if (geometry.numCylinders * trackSize == 0)
25 {
26 log("RAW: no sectors in output; skipping image file generation.");
27 return;
28 }
29
30 log("RAW: writing {} tracks, {} sides",
31 geometry.numCylinders,
32 geometry.numHeads);
33
34 std::ofstream outputFile(
35 _config.filename(), std::ios::out | std::ios::binary);
36 if (!outputFile.is_open())
37 error("RAW: cannot open output file");
38
39 unsigned sectorFileOffset;
40 for (int track = 0; track < geometry.numCylinders * geometry.numHeads;
41 track++)
42 {
43 int side = (track < geometry.numCylinders) ? 0 : 1;
44
45 std::vector<std::shared_ptr<Record>> records;
46 for (int sectorId = 0; sectorId < geometry.numSectors; sectorId++)
47 {
48 const auto& sector =
49 image.get(track % geometry.numCylinders, side, sectorId);
50 if (sector)
51 records.insert(records.end(),
52 sector->records.begin(),
53 sector->records.end());
54 }
55
56 std::sort(records.begin(),
57 records.end(),
58 [&](std::shared_ptr<Record> left, std::shared_ptr<Record> right)
59 {
60 return left->startTime < right->startTime;
61 });
62
63 for (const auto& record : records)
64 {
65 record->rawData.writeTo(outputFile);
66 Bytes(3).writeTo(outputFile);
67 }
68 Bytes(1).writeTo(outputFile);
69 }
70 }
71};
72
73std::unique_ptr<ImageWriter> ImageWriter::createRawImageWriter(

Callers

nothing calls this directly

Calls 7

errorFunction · 0.85
writeToMethod · 0.80
logFunction · 0.50
BytesClass · 0.50
getMethod · 0.45
endMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected