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

Method readImage

lib/imagereader/jv3imagereader.cc:92–139  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

90 Jv3ImageReader(const ImageReaderProto& config): ImageReader(config) {}
91
92 std::unique_ptr<Image> readImage() override
93 {
94 std::ifstream inputFile(
95 _config.filename(), std::ios::in | std::ios::binary);
96 if (!inputFile.is_open())
97 error("cannot open input file");
98
99 inputFile.seekg(0, std::ios::end);
100 unsigned inputFileSize = inputFile.tellg();
101 unsigned headerPtr = 0;
102 std::unique_ptr<Image> image(new Image);
103 for (;;)
104 {
105 unsigned dataPtr = headerPtr + 2901 * 3 + 1;
106 if (dataPtr >= inputFileSize)
107 break;
108
109 for (unsigned i = 0; i < 2901; i++)
110 {
111 SectorHeader header = {0, 0, 0xff};
112 inputFile.seekg(headerPtr);
113 inputFile.read((char*)&header, 3);
114 unsigned sectorSize = getSectorSize(header.flags);
115 if ((header.flags & JV3_FREEF) != JV3_FREEF)
116 {
117 Bytes data(sectorSize);
118 inputFile.seekg(dataPtr);
119 inputFile.read((char*)data.begin(), sectorSize);
120
121 unsigned head = !!(header.flags & JV3_SIDE);
122 const auto& sector =
123 image->put(header.track, head, header.sector);
124 sector->status = Sector::OK;
125 sector->data = data;
126 }
127
128 headerPtr += 3;
129 dataPtr += sectorSize;
130 }
131
132 /* dataPtr is now pointing at the beginning of the next chunk. */
133
134 headerPtr = dataPtr;
135 }
136
137 image->calculateSize();
138 return image;
139 }
140};
141
142std::unique_ptr<ImageReader> ImageReader::createJv3ImageReader(

Callers

nothing calls this directly

Calls 6

errorFunction · 0.85
calculateSizeMethod · 0.80
getSectorSizeFunction · 0.70
readMethod · 0.45
beginMethod · 0.45
putMethod · 0.45

Tested by

no test coverage detected