mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	Add missing files...
This commit is contained in:
		
							
								
								
									
										77
									
								
								lib/fluxsource/dmkfluxsource.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								lib/fluxsource/dmkfluxsource.cc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| #include "lib/globals.h" | ||||
| #include "lib/fluxmap.h" | ||||
| #include "lib/fluxsource/fluxsource.pb.h" | ||||
| #include "lib/fluxsource/fluxsource.h" | ||||
| #include "lib/fluxsource/catweasel.h" | ||||
| #include "lib/proto.h" | ||||
| #include "lib/logger.h" | ||||
| #include <fstream> | ||||
| #include <filesystem> | ||||
|  | ||||
| class DmkFluxSourceIterator : public FluxSourceIterator | ||||
| { | ||||
| public: | ||||
|     DmkFluxSourceIterator(const std::string& path, int track, int side): | ||||
|         _path(path), | ||||
|         _track(track), | ||||
|         _side(side) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     bool hasNext() const override | ||||
|     { | ||||
|         std::string p = getPath(); | ||||
|         return std::filesystem::exists(getPath()); | ||||
|     } | ||||
|  | ||||
|     std::unique_ptr<const Fluxmap> next() override | ||||
|     { | ||||
|         std::string path = getPath(); | ||||
|         log("DMK: reading {}", path); | ||||
|         std::ifstream ifstream(getPath(), std::ios::binary); | ||||
|         if (!ifstream) | ||||
|             return std::make_unique<Fluxmap>(); | ||||
|         _count++; | ||||
|  | ||||
|         Bytes bytes(ifstream); | ||||
|         return decodeCatweaselData(bytes, 1e9 / 7080500.0); | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     const std::string getPath() const | ||||
|     { | ||||
|         return fmt::format( | ||||
|             "{}/C_S{:01}T{:02}.{:03}", _path, _side, _track, _count); | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     const std::string _path; | ||||
|     const int _track; | ||||
|     const int _side; | ||||
|     int _count = 0; | ||||
| }; | ||||
|  | ||||
| class DmkFluxSource : public FluxSource | ||||
| { | ||||
| public: | ||||
|     DmkFluxSource(const DmkFluxSourceProto& config): _path(config.directory()) | ||||
|     { | ||||
|     } | ||||
|  | ||||
| public: | ||||
|     std::unique_ptr<FluxSourceIterator> readFlux(int track, int side) override | ||||
|     { | ||||
|         return std::make_unique<DmkFluxSourceIterator>(_path, track, side); | ||||
|     } | ||||
|  | ||||
|     void recalibrate() override {} | ||||
|  | ||||
| private: | ||||
|     const std::string _path; | ||||
| }; | ||||
|  | ||||
| std::unique_ptr<FluxSource> FluxSource::createDmkFluxSource( | ||||
|     const DmkFluxSourceProto& config) | ||||
| { | ||||
|     return std::unique_ptr<FluxSource>(new DmkFluxSource(config)); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user