mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 02:40:05 +00:00 
			
		
		
		
	Standalone tabular alphanumeric product message
This commit is contained in:
		
							parent
							
								
									0b063f6e8c
								
							
						
					
					
						commit
						235c060b17
					
				
					 3 changed files with 80 additions and 50 deletions
				
			
		|  | @ -10,6 +10,7 @@ | |||
| #include <scwx/util/time.hpp> | ||||
| 
 | ||||
| #include <fstream> | ||||
| #include <set> | ||||
| 
 | ||||
| #include <boost/iostreams/copy.hpp> | ||||
| #include <boost/iostreams/filtering_streambuf.hpp> | ||||
|  | @ -24,6 +25,8 @@ namespace wsr88d | |||
| 
 | ||||
| static const std::string logPrefix_ = "[scwx::wsr88d::level3_file] "; | ||||
| 
 | ||||
| static const std::set<int16_t> standaloneTabularProducts_ = {62, 75, 77, 82}; | ||||
| 
 | ||||
| class Level3FileImpl | ||||
| { | ||||
| public: | ||||
|  | @ -259,15 +262,27 @@ bool Level3FileImpl::LoadBlocks(std::istream& is) | |||
| 
 | ||||
|    BOOST_LOG_TRIVIAL(debug) << logPrefix_ << "Loading Blocks"; | ||||
| 
 | ||||
|    bool skipTabularHeader = false; | ||||
| 
 | ||||
|    std::streampos offsetBasePos = is.tellg(); | ||||
| 
 | ||||
|    constexpr size_t offsetBase = | ||||
|       rpg::Level3MessageHeader::SIZE + rpg::ProductDescriptionBlock::SIZE; | ||||
| 
 | ||||
|    const size_t offsetToSymbology = | ||||
|       descriptionBlock_->offset_to_symbology() * 2u; | ||||
|    const size_t offsetToGraphic = descriptionBlock_->offset_to_graphic() * 2u; | ||||
|    const size_t offsetToTabular = descriptionBlock_->offset_to_tabular() * 2u; | ||||
|    size_t offsetToSymbology = descriptionBlock_->offset_to_symbology() * 2u; | ||||
|    size_t offsetToGraphic   = descriptionBlock_->offset_to_graphic() * 2u; | ||||
|    size_t offsetToTabular   = descriptionBlock_->offset_to_tabular() * 2u; | ||||
| 
 | ||||
|    if (standaloneTabularProducts_.contains(messageHeader_->message_code())) | ||||
|    { | ||||
|       // These products are completely alphanumeric, and do not contain a
 | ||||
|       // symbology block.
 | ||||
|       offsetToTabular   = offsetToSymbology; | ||||
|       offsetToSymbology = 0; | ||||
|       offsetToGraphic   = 0; | ||||
| 
 | ||||
|       skipTabularHeader = true; | ||||
|    } | ||||
| 
 | ||||
|    if (offsetToSymbology >= offsetBase) | ||||
|    { | ||||
|  | @ -308,7 +323,7 @@ bool Level3FileImpl::LoadBlocks(std::istream& is) | |||
|       tabularBlock_ = std::make_shared<rpg::TabularAlphanumericBlock>(); | ||||
| 
 | ||||
|       is.seekg(offsetToTabular - offsetBase, std::ios_base::cur); | ||||
|       tabularValid = tabularBlock_->Parse(is); | ||||
|       tabularValid = tabularBlock_->Parse(is, skipTabularHeader); | ||||
|       is.seekg(offsetBasePos, std::ios_base::beg); | ||||
| 
 | ||||
|       BOOST_LOG_TRIVIAL(debug) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat