mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 14:20:04 +00:00 
			
		
		
		
	Radar product manager load file functionality
This commit is contained in:
		
							parent
							
								
									3829b77994
								
							
						
					
					
						commit
						f7b8778e0d
					
				
					 2 changed files with 76 additions and 0 deletions
				
			
		|  | @ -2,10 +2,12 @@ | ||||||
| #include <scwx/common/constants.hpp> | #include <scwx/common/constants.hpp> | ||||||
| #include <scwx/qt/config/radar_site.hpp> | #include <scwx/qt/config/radar_site.hpp> | ||||||
| #include <scwx/util/threads.hpp> | #include <scwx/util/threads.hpp> | ||||||
|  | #include <scwx/wsr88d/nexrad_file_factory.hpp> | ||||||
| 
 | 
 | ||||||
| #include <deque> | #include <deque> | ||||||
| #include <execution> | #include <execution> | ||||||
| #include <mutex> | #include <mutex> | ||||||
|  | #include <shared_mutex> | ||||||
| 
 | 
 | ||||||
| #include <boost/log/trivial.hpp> | #include <boost/log/trivial.hpp> | ||||||
| #include <boost/range/irange.hpp> | #include <boost/range/irange.hpp> | ||||||
|  | @ -23,6 +25,13 @@ namespace manager | ||||||
| static const std::string logPrefix_ = | static const std::string logPrefix_ = | ||||||
|    "[scwx::qt::manager::radar_product_manager] "; |    "[scwx::qt::manager::radar_product_manager] "; | ||||||
| 
 | 
 | ||||||
|  | typedef std::function<std::shared_ptr<wsr88d::NexradFile>()> | ||||||
|  |    CreateNexradFileFunction; | ||||||
|  | 
 | ||||||
|  | static void LoadNexradFile(CreateNexradFileFunction load, | ||||||
|  |                            FileLoadCompleteFunction onComplete, | ||||||
|  |                            QObject*                 context); | ||||||
|  | 
 | ||||||
| static constexpr uint32_t NUM_RADIAL_GATES_0_5_DEGREE = | static constexpr uint32_t NUM_RADIAL_GATES_0_5_DEGREE = | ||||||
|    common::MAX_0_5_DEGREE_RADIALS * common::MAX_DATA_MOMENT_GATES; |    common::MAX_0_5_DEGREE_RADIALS * common::MAX_DATA_MOMENT_GATES; | ||||||
| static constexpr uint32_t NUM_RADIAL_GATES_1_DEGREE = | static constexpr uint32_t NUM_RADIAL_GATES_1_DEGREE = | ||||||
|  | @ -36,6 +45,8 @@ static constexpr uint32_t NUM_COORIDNATES_1_DEGREE = | ||||||
| static std::unordered_map<std::string, std::shared_ptr<RadarProductManager>> | static std::unordered_map<std::string, std::shared_ptr<RadarProductManager>> | ||||||
|    instanceMap_; |    instanceMap_; | ||||||
| 
 | 
 | ||||||
|  | static std::shared_mutex fileLoadMutex_; | ||||||
|  | 
 | ||||||
| class RadarProductManagerImpl | class RadarProductManagerImpl | ||||||
| { | { | ||||||
| public: | public: | ||||||
|  | @ -199,6 +210,60 @@ void RadarProductManager::Initialize() | ||||||
|    p->initialized_ = true; |    p->initialized_ = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void RadarProductManager::LoadData(std::istream&            is, | ||||||
|  |                                    FileLoadCompleteFunction onComplete, | ||||||
|  |                                    QObject*                 context) | ||||||
|  | { | ||||||
|  |    LoadNexradFile( | ||||||
|  |       [=, &is]() -> std::shared_ptr<wsr88d::NexradFile> { | ||||||
|  |          return wsr88d::NexradFileFactory::Create(is); | ||||||
|  |       }, | ||||||
|  |       onComplete, | ||||||
|  |       context); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void RadarProductManager::LoadFile(const std::string&       filename, | ||||||
|  |                                    FileLoadCompleteFunction onComplete, | ||||||
|  |                                    QObject*                 context) | ||||||
|  | { | ||||||
|  |    LoadNexradFile( | ||||||
|  |       [=]() -> std::shared_ptr<wsr88d::NexradFile> { | ||||||
|  |          return wsr88d::NexradFileFactory::Create(filename); | ||||||
|  |       }, | ||||||
|  |       onComplete, | ||||||
|  |       context); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void LoadNexradFile(CreateNexradFileFunction load, | ||||||
|  |                            FileLoadCompleteFunction onComplete, | ||||||
|  |                            QObject*                 context) | ||||||
|  | { | ||||||
|  |    scwx::util::async( | ||||||
|  |       [=]() | ||||||
|  |       { | ||||||
|  |          std::unique_lock                    lock(fileLoadMutex_); | ||||||
|  |          std::shared_ptr<wsr88d::NexradFile> nexradFile = load(); | ||||||
|  | 
 | ||||||
|  |          // TODO: Store and index
 | ||||||
|  |          //       - Should this impact arguments sent back in onComplete?
 | ||||||
|  | 
 | ||||||
|  |          lock.unlock(); | ||||||
|  | 
 | ||||||
|  |          if (onComplete != nullptr) | ||||||
|  |          { | ||||||
|  |             if (context == nullptr) | ||||||
|  |             { | ||||||
|  |                onComplete(nexradFile); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                QMetaObject::invokeMethod(context, | ||||||
|  |                                          [=]() { onComplete(nexradFile); }); | ||||||
|  |             } | ||||||
|  |          } | ||||||
|  |       }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void RadarProductManager::LoadLevel2Data(const std::string& filename) | void RadarProductManager::LoadLevel2Data(const std::string& filename) | ||||||
| { | { | ||||||
|    std::shared_ptr<wsr88d::Ar2vFile> ar2vFile = |    std::shared_ptr<wsr88d::Ar2vFile> ar2vFile = | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| #include <scwx/common/types.hpp> | #include <scwx/common/types.hpp> | ||||||
| #include <scwx/qt/config/radar_site.hpp> | #include <scwx/qt/config/radar_site.hpp> | ||||||
| #include <scwx/wsr88d/ar2v_file.hpp> | #include <scwx/wsr88d/ar2v_file.hpp> | ||||||
|  | #include <scwx/wsr88d/level3_file.hpp> | ||||||
| 
 | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <vector> | #include <vector> | ||||||
|  | @ -16,6 +17,9 @@ namespace qt | ||||||
| namespace manager | namespace manager | ||||||
| { | { | ||||||
| 
 | 
 | ||||||
|  | typedef std::function<void(std::shared_ptr<wsr88d::NexradFile>)> | ||||||
|  |    FileLoadCompleteFunction; | ||||||
|  | 
 | ||||||
| class RadarProductManagerImpl; | class RadarProductManagerImpl; | ||||||
| 
 | 
 | ||||||
| class RadarProductManager : public QObject | class RadarProductManager : public QObject | ||||||
|  | @ -45,6 +49,13 @@ public: | ||||||
|    static std::shared_ptr<RadarProductManager> |    static std::shared_ptr<RadarProductManager> | ||||||
|    Instance(const std::string& radarSite); |    Instance(const std::string& radarSite); | ||||||
| 
 | 
 | ||||||
|  |    static void LoadData(std::istream&            is, | ||||||
|  |                         FileLoadCompleteFunction onComplete, | ||||||
|  |                         QObject*                 context = nullptr); | ||||||
|  |    static void LoadFile(const std::string&       filename, | ||||||
|  |                         FileLoadCompleteFunction onComplete, | ||||||
|  |                         QObject*                 context = nullptr); | ||||||
|  | 
 | ||||||
| signals: | signals: | ||||||
|    void Level2DataLoaded(); |    void Level2DataLoaded(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat