mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	Add the FL2 reader.
This commit is contained in:
		
							
								
								
									
										55
									
								
								lib/fluxsource/fl2fluxsource.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								lib/fluxsource/fl2fluxsource.cc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| #include "globals.h" | ||||
| #include "fluxmap.h" | ||||
| #include "lib/fluxsource/fluxsource.pb.h" | ||||
| #include "lib/fl2.pb.h" | ||||
| #include "fluxsource/fluxsource.h" | ||||
| #include "proto.h" | ||||
| #include "fmt/format.h" | ||||
| #include <fstream> | ||||
|  | ||||
| class Fl2FluxSource : public FluxSource | ||||
| { | ||||
| public: | ||||
|     Fl2FluxSource(const Fl2FluxSourceProto& config): | ||||
| 		_config(config) | ||||
|     { | ||||
| 		std::ifstream ifs(_config.filename(), std::ios::in | std::ios::binary); | ||||
| 		if (!ifs.is_open()) | ||||
| 			Error() << fmt::format("cannot open input file '{}': {}", | ||||
| 				_config.filename(), strerror(errno)); | ||||
|  | ||||
| 		if (!_proto.ParseFromIstream(&ifs)) | ||||
| 			Error() << "unable to read input file"; | ||||
| 	} | ||||
|  | ||||
| public: | ||||
|     std::unique_ptr<Fluxmap> readFlux(int cylinder, int head) | ||||
|     { | ||||
| 		for (const auto& track : _proto.track()) | ||||
| 		{ | ||||
| 			if ((track.cylinder() == cylinder) && (track.head() == head)) | ||||
| 				return std::make_unique<Fluxmap>(track.flux()); | ||||
| 		} | ||||
|  | ||||
| 		return std::unique_ptr<Fluxmap>(); | ||||
|     } | ||||
|  | ||||
|     void recalibrate() {} | ||||
|  | ||||
| private: | ||||
| 	void check_for_error(std::ifstream& ifs) | ||||
| 	{ | ||||
| 		if (ifs.fail()) | ||||
| 			Error() << fmt::format("FL2 read I/O error: {}", strerror(errno)); | ||||
| 	} | ||||
|  | ||||
| private: | ||||
|     const Fl2FluxSourceProto& _config; | ||||
| 	FluxFileProto _proto; | ||||
| }; | ||||
|  | ||||
| std::unique_ptr<FluxSource> FluxSource::createFl2FluxSource(const Fl2FluxSourceProto& config) | ||||
| { | ||||
|     return std::unique_ptr<FluxSource>(new Fl2FluxSource(config)); | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user