mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 23:10:05 +00:00
Significant refactor of Digital Radar Data Generic with nested classes
This commit is contained in:
parent
b524b6f53d
commit
b8b0812ce6
3 changed files with 254 additions and 293 deletions
|
|
@ -90,7 +90,8 @@ public:
|
||||||
float selectedElevation_;
|
float selectedElevation_;
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::rda::ElevationScan> elevationScan_;
|
std::shared_ptr<wsr88d::rda::ElevationScan> elevationScan_;
|
||||||
std::shared_ptr<wsr88d::rda::MomentDataBlock> momentDataBlock0_;
|
std::shared_ptr<wsr88d::rda::DigitalRadarDataGeneric::MomentDataBlock>
|
||||||
|
momentDataBlock0_;
|
||||||
|
|
||||||
std::vector<float> coordinates_ {};
|
std::vector<float> coordinates_ {};
|
||||||
std::vector<float> vertices_ {};
|
std::vector<float> vertices_ {};
|
||||||
|
|
|
||||||
|
|
@ -31,24 +31,66 @@ typedef util::
|
||||||
Iterator<DataBlockType, DataBlockType::MomentRef, DataBlockType::MomentCfp>
|
Iterator<DataBlockType, DataBlockType::MomentRef, DataBlockType::MomentCfp>
|
||||||
MomentDataBlockTypeIterator;
|
MomentDataBlockTypeIterator;
|
||||||
|
|
||||||
class DataBlockImpl;
|
|
||||||
class ElevationDataBlockImpl;
|
|
||||||
class MomentDataBlockImpl;
|
|
||||||
class RadialDataBlockImpl;
|
|
||||||
class VolumeDataBlockImpl;
|
|
||||||
|
|
||||||
class DigitalRadarDataGeneric;
|
class DigitalRadarDataGeneric;
|
||||||
class DigitalRadarDataGenericImpl;
|
|
||||||
|
|
||||||
typedef std::map<uint16_t, std::shared_ptr<DigitalRadarDataGeneric>>
|
typedef std::map<std::uint16_t, std::shared_ptr<DigitalRadarDataGeneric>>
|
||||||
ElevationScan;
|
ElevationScan;
|
||||||
|
|
||||||
class DataBlock
|
class DigitalRadarDataGeneric : public Level2Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
class DataBlock;
|
||||||
|
class ElevationDataBlock;
|
||||||
|
class MomentDataBlock;
|
||||||
|
class RadialDataBlock;
|
||||||
|
class VolumeDataBlock;
|
||||||
|
|
||||||
|
explicit DigitalRadarDataGeneric();
|
||||||
|
~DigitalRadarDataGeneric();
|
||||||
|
|
||||||
|
DigitalRadarDataGeneric(const DigitalRadarDataGeneric&) = delete;
|
||||||
|
DigitalRadarDataGeneric& operator=(const DigitalRadarDataGeneric&) = delete;
|
||||||
|
|
||||||
|
DigitalRadarDataGeneric(DigitalRadarDataGeneric&&) noexcept;
|
||||||
|
DigitalRadarDataGeneric& operator=(DigitalRadarDataGeneric&&) noexcept;
|
||||||
|
|
||||||
|
std::string radar_identifier() const;
|
||||||
|
std::uint32_t collection_time() const;
|
||||||
|
std::uint16_t modified_julian_date() const;
|
||||||
|
std::uint16_t azimuth_number() const;
|
||||||
|
units::degrees<float> azimuth_angle() const;
|
||||||
|
std::uint8_t compression_indicator() const;
|
||||||
|
std::uint16_t radial_length() const;
|
||||||
|
std::uint8_t azimuth_resolution_spacing() const;
|
||||||
|
std::uint8_t radial_status() const;
|
||||||
|
std::uint8_t elevation_number() const;
|
||||||
|
std::uint8_t cut_sector_number() const;
|
||||||
|
units::degrees<float> elevation_angle() const;
|
||||||
|
std::uint8_t radial_spot_blanking_status() const;
|
||||||
|
std::uint8_t azimuth_indexing_mode() const;
|
||||||
|
std::uint16_t data_block_count() const;
|
||||||
|
|
||||||
|
std::shared_ptr<ElevationDataBlock> elevation_data_block() const;
|
||||||
|
std::shared_ptr<RadialDataBlock> radial_data_block() const;
|
||||||
|
std::shared_ptr<VolumeDataBlock> volume_data_block() const;
|
||||||
|
std::shared_ptr<MomentDataBlock> moment_data_block(DataBlockType type) const;
|
||||||
|
|
||||||
|
bool Parse(std::istream& is);
|
||||||
|
|
||||||
|
static std::shared_ptr<DigitalRadarDataGeneric>
|
||||||
|
Create(Level2MessageHeader&& header, std::istream& is);
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> p;
|
||||||
|
};
|
||||||
|
|
||||||
|
class DigitalRadarDataGeneric::DataBlock
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
explicit DataBlock(const std::string& dataBlockType,
|
explicit DataBlock(const std::string& dataBlockType,
|
||||||
const std::string& dataName);
|
const std::string& dataName);
|
||||||
~DataBlock();
|
virtual ~DataBlock();
|
||||||
|
|
||||||
DataBlock(const DataBlock&) = delete;
|
DataBlock(const DataBlock&) = delete;
|
||||||
DataBlock& operator=(const DataBlock&) = delete;
|
DataBlock& operator=(const DataBlock&) = delete;
|
||||||
|
|
@ -57,10 +99,11 @@ protected:
|
||||||
DataBlock& operator=(DataBlock&&) noexcept;
|
DataBlock& operator=(DataBlock&&) noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<DataBlockImpl> p;
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> p;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ElevationDataBlock : public DataBlock
|
class DigitalRadarDataGeneric::ElevationDataBlock : public DataBlock
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit ElevationDataBlock(const std::string& dataBlockType,
|
explicit ElevationDataBlock(const std::string& dataBlockType,
|
||||||
|
|
@ -79,12 +122,13 @@ public:
|
||||||
std::istream& is);
|
std::istream& is);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<ElevationDataBlockImpl> p;
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> p;
|
||||||
|
|
||||||
bool Parse(std::istream& is);
|
bool Parse(std::istream& is);
|
||||||
};
|
};
|
||||||
|
|
||||||
class MomentDataBlock : public DataBlock
|
class DigitalRadarDataGeneric::MomentDataBlock : public DataBlock
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit MomentDataBlock(const std::string& dataBlockType,
|
explicit MomentDataBlock(const std::string& dataBlockType,
|
||||||
|
|
@ -97,14 +141,14 @@ public:
|
||||||
MomentDataBlock(MomentDataBlock&&) noexcept;
|
MomentDataBlock(MomentDataBlock&&) noexcept;
|
||||||
MomentDataBlock& operator=(MomentDataBlock&&) noexcept;
|
MomentDataBlock& operator=(MomentDataBlock&&) noexcept;
|
||||||
|
|
||||||
uint16_t number_of_data_moment_gates() const;
|
std::uint16_t number_of_data_moment_gates() const;
|
||||||
units::kilometers<float> data_moment_range() const;
|
units::kilometers<float> data_moment_range() const;
|
||||||
uint16_t data_moment_range_raw() const;
|
std::uint16_t data_moment_range_raw() const;
|
||||||
units::kilometers<float> data_moment_range_sample_interval() const;
|
units::kilometers<float> data_moment_range_sample_interval() const;
|
||||||
uint16_t data_moment_range_sample_interval_raw() const;
|
std::uint16_t data_moment_range_sample_interval_raw() const;
|
||||||
float snr_threshold() const;
|
float snr_threshold() const;
|
||||||
int16_t snr_threshold_raw() const;
|
std::int16_t snr_threshold_raw() const;
|
||||||
uint8_t data_word_size() const;
|
std::uint8_t data_word_size() const;
|
||||||
float scale() const;
|
float scale() const;
|
||||||
float offset() const;
|
float offset() const;
|
||||||
const void* data_moments() const;
|
const void* data_moments() const;
|
||||||
|
|
@ -115,12 +159,13 @@ public:
|
||||||
std::istream& is);
|
std::istream& is);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<MomentDataBlockImpl> p;
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> p;
|
||||||
|
|
||||||
bool Parse(std::istream& is);
|
bool Parse(std::istream& is);
|
||||||
};
|
};
|
||||||
|
|
||||||
class RadialDataBlock : public DataBlock
|
class DigitalRadarDataGeneric::RadialDataBlock : public DataBlock
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit RadialDataBlock(const std::string& dataBlockType,
|
explicit RadialDataBlock(const std::string& dataBlockType,
|
||||||
|
|
@ -141,12 +186,13 @@ public:
|
||||||
std::istream& is);
|
std::istream& is);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<RadialDataBlockImpl> p;
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> p;
|
||||||
|
|
||||||
bool Parse(std::istream& is);
|
bool Parse(std::istream& is);
|
||||||
};
|
};
|
||||||
|
|
||||||
class VolumeDataBlock : public DataBlock
|
class DigitalRadarDataGeneric::VolumeDataBlock : public DataBlock
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit VolumeDataBlock(const std::string& dataBlockType,
|
explicit VolumeDataBlock(const std::string& dataBlockType,
|
||||||
|
|
@ -161,7 +207,7 @@ public:
|
||||||
|
|
||||||
float latitude() const;
|
float latitude() const;
|
||||||
float longitude() const;
|
float longitude() const;
|
||||||
uint16_t volume_coverage_pattern_number() const;
|
std::uint16_t volume_coverage_pattern_number() const;
|
||||||
|
|
||||||
static std::shared_ptr<VolumeDataBlock>
|
static std::shared_ptr<VolumeDataBlock>
|
||||||
Create(const std::string& dataBlockType,
|
Create(const std::string& dataBlockType,
|
||||||
|
|
@ -169,53 +215,12 @@ public:
|
||||||
std::istream& is);
|
std::istream& is);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<VolumeDataBlockImpl> p;
|
class Impl;
|
||||||
|
std::unique_ptr<Impl> p;
|
||||||
|
|
||||||
bool Parse(std::istream& is);
|
bool Parse(std::istream& is);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DigitalRadarDataGeneric : public Level2Message
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit DigitalRadarDataGeneric();
|
|
||||||
~DigitalRadarDataGeneric();
|
|
||||||
|
|
||||||
DigitalRadarDataGeneric(const DigitalRadarDataGeneric&) = delete;
|
|
||||||
DigitalRadarDataGeneric& operator=(const DigitalRadarDataGeneric&) = delete;
|
|
||||||
|
|
||||||
DigitalRadarDataGeneric(DigitalRadarDataGeneric&&) noexcept;
|
|
||||||
DigitalRadarDataGeneric& operator=(DigitalRadarDataGeneric&&) noexcept;
|
|
||||||
|
|
||||||
std::string radar_identifier() const;
|
|
||||||
uint32_t collection_time() const;
|
|
||||||
uint16_t modified_julian_date() const;
|
|
||||||
uint16_t azimuth_number() const;
|
|
||||||
units::degrees<float> azimuth_angle() const;
|
|
||||||
uint8_t compression_indicator() const;
|
|
||||||
uint16_t radial_length() const;
|
|
||||||
uint8_t azimuth_resolution_spacing() const;
|
|
||||||
uint8_t radial_status() const;
|
|
||||||
uint8_t elevation_number() const;
|
|
||||||
uint8_t cut_sector_number() const;
|
|
||||||
units::degrees<float> elevation_angle() const;
|
|
||||||
uint8_t radial_spot_blanking_status() const;
|
|
||||||
uint8_t azimuth_indexing_mode() const;
|
|
||||||
uint16_t data_block_count() const;
|
|
||||||
|
|
||||||
std::shared_ptr<ElevationDataBlock> elevation_data_block() const;
|
|
||||||
std::shared_ptr<RadialDataBlock> radial_data_block() const;
|
|
||||||
std::shared_ptr<VolumeDataBlock> volume_data_block() const;
|
|
||||||
std::shared_ptr<MomentDataBlock> moment_data_block(DataBlockType type) const;
|
|
||||||
|
|
||||||
bool Parse(std::istream& is);
|
|
||||||
|
|
||||||
static std::shared_ptr<DigitalRadarDataGeneric>
|
|
||||||
Create(Level2MessageHeader&& header, std::istream& is);
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::unique_ptr<DigitalRadarDataGenericImpl> p;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace rda
|
} // namespace rda
|
||||||
} // namespace wsr88d
|
} // namespace wsr88d
|
||||||
} // namespace scwx
|
} // namespace scwx
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,10 @@ static const std::unordered_map<std::string, DataBlockType> strToDataBlock_ {
|
||||||
{"RHO", DataBlockType::MomentRho},
|
{"RHO", DataBlockType::MomentRho},
|
||||||
{"CFP", DataBlockType::MomentCfp}};
|
{"CFP", DataBlockType::MomentCfp}};
|
||||||
|
|
||||||
class DataBlockImpl
|
class DigitalRadarDataGeneric::DataBlock::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit DataBlockImpl(const std::string& dataBlockType,
|
explicit Impl(const std::string& dataBlockType,
|
||||||
const std::string& dataName) :
|
const std::string& dataName) :
|
||||||
dataBlockType_ {dataBlockType}, dataName_ {dataName}
|
dataBlockType_ {dataBlockType}, dataName_ {dataName}
|
||||||
{
|
{
|
||||||
|
|
@ -37,110 +37,106 @@ public:
|
||||||
std::string dataName_;
|
std::string dataName_;
|
||||||
};
|
};
|
||||||
|
|
||||||
DataBlock::DataBlock(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::DataBlock::DataBlock(const std::string& dataBlockType,
|
||||||
const std::string& dataName) :
|
const std::string& dataName) :
|
||||||
p(std::make_unique<DataBlockImpl>(dataBlockType, dataName))
|
p(std::make_unique<Impl>(dataBlockType, dataName))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
DataBlock::~DataBlock() = default;
|
DigitalRadarDataGeneric::DataBlock::~DataBlock() = default;
|
||||||
|
|
||||||
DataBlock::DataBlock(DataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::DataBlock::DataBlock(DataBlock&&) noexcept = default;
|
||||||
DataBlock& DataBlock::operator=(DataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::DataBlock&
|
||||||
|
DigitalRadarDataGeneric::DataBlock::operator=(DataBlock&&) noexcept = default;
|
||||||
|
|
||||||
class MomentDataBlockImpl
|
class DigitalRadarDataGeneric::MomentDataBlock::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit MomentDataBlockImpl() :
|
explicit Impl() {}
|
||||||
numberOfDataMomentGates_ {0},
|
|
||||||
dataMomentRange_ {0},
|
|
||||||
dataMomentRangeSampleInterval_ {0},
|
|
||||||
tover_ {0},
|
|
||||||
snrThreshold_ {0},
|
|
||||||
controlFlags_ {0},
|
|
||||||
dataWordSize_ {0},
|
|
||||||
scale_ {0.0f},
|
|
||||||
offset_ {0.0f}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t numberOfDataMomentGates_;
|
std::uint16_t numberOfDataMomentGates_ {0};
|
||||||
uint16_t dataMomentRange_;
|
std::uint16_t dataMomentRange_ {0};
|
||||||
uint16_t dataMomentRangeSampleInterval_;
|
std::uint16_t dataMomentRangeSampleInterval_ {0};
|
||||||
uint16_t tover_;
|
std::uint16_t tover_ {0};
|
||||||
int16_t snrThreshold_;
|
std::int16_t snrThreshold_ {0};
|
||||||
uint8_t controlFlags_;
|
std::uint8_t controlFlags_ {0};
|
||||||
uint8_t dataWordSize_;
|
std::uint8_t dataWordSize_ {0};
|
||||||
float scale_;
|
float scale_ {0.0f};
|
||||||
float offset_;
|
float offset_ {0.0f};
|
||||||
|
|
||||||
std::vector<uint8_t> momentGates8_;
|
std::vector<std::uint8_t> momentGates8_ {};
|
||||||
std::vector<uint16_t> momentGates16_;
|
std::vector<std::uint16_t> momentGates16_ {};
|
||||||
};
|
};
|
||||||
|
|
||||||
MomentDataBlock::MomentDataBlock(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::MomentDataBlock::MomentDataBlock(
|
||||||
const std::string& dataName) :
|
const std::string& dataBlockType, const std::string& dataName) :
|
||||||
DataBlock(dataBlockType, dataName),
|
DataBlock(dataBlockType, dataName), p(std::make_unique<Impl>())
|
||||||
p(std::make_unique<MomentDataBlockImpl>())
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
MomentDataBlock::~MomentDataBlock() = default;
|
DigitalRadarDataGeneric::MomentDataBlock::~MomentDataBlock() = default;
|
||||||
|
|
||||||
MomentDataBlock::MomentDataBlock(MomentDataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::MomentDataBlock::MomentDataBlock(
|
||||||
MomentDataBlock&
|
MomentDataBlock&&) noexcept = default;
|
||||||
MomentDataBlock::operator=(MomentDataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::MomentDataBlock&
|
||||||
|
DigitalRadarDataGeneric::MomentDataBlock::operator=(
|
||||||
|
MomentDataBlock&&) noexcept = default;
|
||||||
|
|
||||||
uint16_t MomentDataBlock::number_of_data_moment_gates() const
|
std::uint16_t
|
||||||
|
DigitalRadarDataGeneric::MomentDataBlock::number_of_data_moment_gates() const
|
||||||
{
|
{
|
||||||
return p->numberOfDataMomentGates_;
|
return p->numberOfDataMomentGates_;
|
||||||
}
|
}
|
||||||
|
|
||||||
units::kilometers<float> MomentDataBlock::data_moment_range() const
|
units::kilometers<float>
|
||||||
|
DigitalRadarDataGeneric::MomentDataBlock::data_moment_range() const
|
||||||
{
|
{
|
||||||
return units::kilometers<float> {p->dataMomentRange_ * 0.001f};
|
return units::kilometers<float> {p->dataMomentRange_ * 0.001f};
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t MomentDataBlock::data_moment_range_raw() const
|
std::uint16_t
|
||||||
|
DigitalRadarDataGeneric::MomentDataBlock::data_moment_range_raw() const
|
||||||
{
|
{
|
||||||
return p->dataMomentRange_;
|
return p->dataMomentRange_;
|
||||||
}
|
}
|
||||||
|
|
||||||
units::kilometers<float>
|
units::kilometers<float>
|
||||||
MomentDataBlock::data_moment_range_sample_interval() const
|
DigitalRadarDataGeneric::MomentDataBlock::data_moment_range_sample_interval()
|
||||||
|
const
|
||||||
{
|
{
|
||||||
return units::kilometers<float> {p->dataMomentRangeSampleInterval_ * 0.001f};
|
return units::kilometers<float> {p->dataMomentRangeSampleInterval_ * 0.001f};
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t MomentDataBlock::data_moment_range_sample_interval_raw() const
|
std::uint16_t DigitalRadarDataGeneric::MomentDataBlock::
|
||||||
|
data_moment_range_sample_interval_raw() const
|
||||||
{
|
{
|
||||||
return p->dataMomentRangeSampleInterval_;
|
return p->dataMomentRangeSampleInterval_;
|
||||||
}
|
}
|
||||||
|
|
||||||
float MomentDataBlock::snr_threshold() const
|
float DigitalRadarDataGeneric::MomentDataBlock::snr_threshold() const
|
||||||
{
|
{
|
||||||
return p->snrThreshold_ * 0.1f;
|
return p->snrThreshold_ * 0.1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t MomentDataBlock::snr_threshold_raw() const
|
std::int16_t DigitalRadarDataGeneric::MomentDataBlock::snr_threshold_raw() const
|
||||||
{
|
{
|
||||||
return p->snrThreshold_;
|
return p->snrThreshold_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t MomentDataBlock::data_word_size() const
|
std::uint8_t DigitalRadarDataGeneric::MomentDataBlock::data_word_size() const
|
||||||
{
|
{
|
||||||
return p->dataWordSize_;
|
return p->dataWordSize_;
|
||||||
}
|
}
|
||||||
|
|
||||||
float MomentDataBlock::scale() const
|
float DigitalRadarDataGeneric::MomentDataBlock::scale() const
|
||||||
{
|
{
|
||||||
return p->scale_;
|
return p->scale_;
|
||||||
}
|
}
|
||||||
|
|
||||||
float MomentDataBlock::offset() const
|
float DigitalRadarDataGeneric::MomentDataBlock::offset() const
|
||||||
{
|
{
|
||||||
return p->offset_;
|
return p->offset_;
|
||||||
}
|
}
|
||||||
|
|
||||||
const void* MomentDataBlock::data_moments() const
|
const void* DigitalRadarDataGeneric::MomentDataBlock::data_moments() const
|
||||||
{
|
{
|
||||||
const void* dataMoments;
|
const void* dataMoments;
|
||||||
|
|
||||||
|
|
@ -160,8 +156,9 @@ const void* MomentDataBlock::data_moments() const
|
||||||
return dataMoments;
|
return dataMoments;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<MomentDataBlock>
|
std::shared_ptr<DigitalRadarDataGeneric::MomentDataBlock>
|
||||||
MomentDataBlock::Create(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::MomentDataBlock::Create(
|
||||||
|
const std::string& dataBlockType,
|
||||||
const std::string& dataName,
|
const std::string& dataName,
|
||||||
std::istream& is)
|
std::istream& is)
|
||||||
{
|
{
|
||||||
|
|
@ -176,7 +173,7 @@ MomentDataBlock::Create(const std::string& dataBlockType,
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MomentDataBlock::Parse(std::istream& is)
|
bool DigitalRadarDataGeneric::MomentDataBlock::Parse(std::istream& is)
|
||||||
{
|
{
|
||||||
bool dataBlockValid = true;
|
bool dataBlockValid = true;
|
||||||
|
|
||||||
|
|
@ -231,72 +228,59 @@ bool MomentDataBlock::Parse(std::istream& is)
|
||||||
return dataBlockValid;
|
return dataBlockValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
class VolumeDataBlockImpl
|
class DigitalRadarDataGeneric::VolumeDataBlock::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit VolumeDataBlockImpl() :
|
explicit Impl() {}
|
||||||
lrtup_ {0},
|
|
||||||
versionNumberMajor_ {0},
|
|
||||||
versionNumberMinor_ {0},
|
|
||||||
latitude_ {0.0f},
|
|
||||||
longitude_ {0.0f},
|
|
||||||
siteHeight_ {0},
|
|
||||||
feedhornHeight_ {0},
|
|
||||||
calibrationConstant_ {0.0f},
|
|
||||||
horizontaShvTxPower_ {0.0f},
|
|
||||||
verticalShvTxPower_ {0.0f},
|
|
||||||
systemDifferentialReflectivity_ {0.0f},
|
|
||||||
initialSystemDifferentialPhase_ {0.0f},
|
|
||||||
volumeCoveragePatternNumber_ {0},
|
|
||||||
processingStatus_ {0}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t lrtup_;
|
std::uint16_t lrtup_ {0};
|
||||||
uint8_t versionNumberMajor_;
|
std::uint8_t versionNumberMajor_ {0};
|
||||||
uint8_t versionNumberMinor_;
|
std::uint8_t versionNumberMinor_ {0};
|
||||||
float latitude_;
|
float latitude_ {0.0f};
|
||||||
float longitude_;
|
float longitude_ {0.0f};
|
||||||
int16_t siteHeight_;
|
std::int16_t siteHeight_ {0};
|
||||||
uint16_t feedhornHeight_;
|
std::uint16_t feedhornHeight_ {0};
|
||||||
float calibrationConstant_;
|
float calibrationConstant_ {0.0f};
|
||||||
float horizontaShvTxPower_;
|
float horizontaShvTxPower_ {0.0f};
|
||||||
float verticalShvTxPower_;
|
float verticalShvTxPower_ {0.0f};
|
||||||
float systemDifferentialReflectivity_;
|
float systemDifferentialReflectivity_ {0.0f};
|
||||||
float initialSystemDifferentialPhase_;
|
float initialSystemDifferentialPhase_ {0.0f};
|
||||||
uint16_t volumeCoveragePatternNumber_;
|
std::uint16_t volumeCoveragePatternNumber_ {0};
|
||||||
uint16_t processingStatus_;
|
std::uint16_t processingStatus_ {0};
|
||||||
};
|
};
|
||||||
|
|
||||||
VolumeDataBlock::VolumeDataBlock(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::VolumeDataBlock::VolumeDataBlock(
|
||||||
const std::string& dataName) :
|
const std::string& dataBlockType, const std::string& dataName) :
|
||||||
DataBlock(dataBlockType, dataName),
|
DataBlock(dataBlockType, dataName), p(std::make_unique<Impl>())
|
||||||
p(std::make_unique<VolumeDataBlockImpl>())
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
VolumeDataBlock::~VolumeDataBlock() = default;
|
DigitalRadarDataGeneric::VolumeDataBlock::~VolumeDataBlock() = default;
|
||||||
|
|
||||||
VolumeDataBlock::VolumeDataBlock(VolumeDataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::VolumeDataBlock::VolumeDataBlock(
|
||||||
VolumeDataBlock&
|
VolumeDataBlock&&) noexcept = default;
|
||||||
VolumeDataBlock::operator=(VolumeDataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::VolumeDataBlock&
|
||||||
|
DigitalRadarDataGeneric::VolumeDataBlock::operator=(
|
||||||
|
VolumeDataBlock&&) noexcept = default;
|
||||||
|
|
||||||
float VolumeDataBlock::latitude() const
|
float DigitalRadarDataGeneric::VolumeDataBlock::latitude() const
|
||||||
{
|
{
|
||||||
return p->latitude_;
|
return p->latitude_;
|
||||||
}
|
}
|
||||||
|
|
||||||
float VolumeDataBlock::longitude() const
|
float DigitalRadarDataGeneric::VolumeDataBlock::longitude() const
|
||||||
{
|
{
|
||||||
return p->longitude_;
|
return p->longitude_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t VolumeDataBlock::volume_coverage_pattern_number() const
|
std::uint16_t
|
||||||
|
DigitalRadarDataGeneric::VolumeDataBlock::volume_coverage_pattern_number() const
|
||||||
{
|
{
|
||||||
return p->volumeCoveragePatternNumber_;
|
return p->volumeCoveragePatternNumber_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<VolumeDataBlock>
|
std::shared_ptr<DigitalRadarDataGeneric::VolumeDataBlock>
|
||||||
VolumeDataBlock::Create(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::VolumeDataBlock::Create(
|
||||||
|
const std::string& dataBlockType,
|
||||||
const std::string& dataName,
|
const std::string& dataName,
|
||||||
std::istream& is)
|
std::istream& is)
|
||||||
{
|
{
|
||||||
|
|
@ -311,7 +295,7 @@ VolumeDataBlock::Create(const std::string& dataBlockType,
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VolumeDataBlock::Parse(std::istream& is)
|
bool DigitalRadarDataGeneric::VolumeDataBlock::Parse(std::istream& is)
|
||||||
{
|
{
|
||||||
bool dataBlockValid = true;
|
bool dataBlockValid = true;
|
||||||
|
|
||||||
|
|
@ -351,33 +335,32 @@ bool VolumeDataBlock::Parse(std::istream& is)
|
||||||
return dataBlockValid;
|
return dataBlockValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ElevationDataBlockImpl
|
class DigitalRadarDataGeneric::ElevationDataBlock::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit ElevationDataBlockImpl() :
|
explicit Impl() {}
|
||||||
lrtup_ {0}, atmos_ {0}, calibrationConstant_ {0.0f}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t lrtup_;
|
std::uint16_t lrtup_ {0};
|
||||||
int16_t atmos_;
|
std::int16_t atmos_ {0};
|
||||||
float calibrationConstant_;
|
float calibrationConstant_ {0.0f};
|
||||||
};
|
};
|
||||||
|
|
||||||
ElevationDataBlock::ElevationDataBlock(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::ElevationDataBlock::ElevationDataBlock(
|
||||||
const std::string& dataName) :
|
const std::string& dataBlockType, const std::string& dataName) :
|
||||||
DataBlock(dataBlockType, dataName),
|
DataBlock(dataBlockType, dataName), p(std::make_unique<Impl>())
|
||||||
p(std::make_unique<ElevationDataBlockImpl>())
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
ElevationDataBlock::~ElevationDataBlock() = default;
|
DigitalRadarDataGeneric::ElevationDataBlock::~ElevationDataBlock() = default;
|
||||||
|
|
||||||
ElevationDataBlock::ElevationDataBlock(ElevationDataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::ElevationDataBlock::ElevationDataBlock(
|
||||||
ElevationDataBlock&
|
ElevationDataBlock&&) noexcept = default;
|
||||||
ElevationDataBlock::operator=(ElevationDataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::ElevationDataBlock&
|
||||||
|
DigitalRadarDataGeneric::ElevationDataBlock::operator=(
|
||||||
|
ElevationDataBlock&&) noexcept = default;
|
||||||
|
|
||||||
std::shared_ptr<ElevationDataBlock>
|
std::shared_ptr<DigitalRadarDataGeneric::ElevationDataBlock>
|
||||||
ElevationDataBlock::Create(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::ElevationDataBlock::Create(
|
||||||
|
const std::string& dataBlockType,
|
||||||
const std::string& dataName,
|
const std::string& dataName,
|
||||||
std::istream& is)
|
std::istream& is)
|
||||||
{
|
{
|
||||||
|
|
@ -392,7 +375,7 @@ ElevationDataBlock::Create(const std::string& dataBlockType,
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ElevationDataBlock::Parse(std::istream& is)
|
bool DigitalRadarDataGeneric::ElevationDataBlock::Parse(std::istream& is)
|
||||||
{
|
{
|
||||||
bool dataBlockValid = true;
|
bool dataBlockValid = true;
|
||||||
|
|
||||||
|
|
@ -407,50 +390,42 @@ bool ElevationDataBlock::Parse(std::istream& is)
|
||||||
return dataBlockValid;
|
return dataBlockValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
class RadialDataBlockImpl
|
class DigitalRadarDataGeneric::RadialDataBlock::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit RadialDataBlockImpl() :
|
explicit Impl() {}
|
||||||
lrtup_ {0},
|
|
||||||
unambigiousRange_ {0},
|
|
||||||
noiseLevelHorizontal_ {0.0f},
|
|
||||||
noiseLevelVertical_ {0.0f},
|
|
||||||
nyquistVelocity_ {0},
|
|
||||||
radialFlags_ {0},
|
|
||||||
calibrationConstantHorizontal_ {0.0f},
|
|
||||||
calibrationConstantVertical_ {0.0f}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t lrtup_;
|
std::uint16_t lrtup_ {0};
|
||||||
uint16_t unambigiousRange_;
|
std::uint16_t unambigiousRange_ {0};
|
||||||
float noiseLevelHorizontal_;
|
float noiseLevelHorizontal_ {0.0f};
|
||||||
float noiseLevelVertical_;
|
float noiseLevelVertical_ {0.0f};
|
||||||
uint16_t nyquistVelocity_;
|
std::uint16_t nyquistVelocity_ {0};
|
||||||
uint16_t radialFlags_;
|
std::uint16_t radialFlags_ {0};
|
||||||
float calibrationConstantHorizontal_;
|
float calibrationConstantHorizontal_ {0.0f};
|
||||||
float calibrationConstantVertical_;
|
float calibrationConstantVertical_ {0.0f};
|
||||||
};
|
};
|
||||||
|
|
||||||
RadialDataBlock::RadialDataBlock(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::RadialDataBlock::RadialDataBlock(
|
||||||
const std::string& dataName) :
|
const std::string& dataBlockType, const std::string& dataName) :
|
||||||
DataBlock(dataBlockType, dataName),
|
DataBlock(dataBlockType, dataName), p(std::make_unique<Impl>())
|
||||||
p(std::make_unique<RadialDataBlockImpl>())
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
RadialDataBlock::~RadialDataBlock() = default;
|
DigitalRadarDataGeneric::RadialDataBlock::~RadialDataBlock() = default;
|
||||||
|
|
||||||
RadialDataBlock::RadialDataBlock(RadialDataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::RadialDataBlock::RadialDataBlock(
|
||||||
RadialDataBlock&
|
RadialDataBlock&&) noexcept = default;
|
||||||
RadialDataBlock::operator=(RadialDataBlock&&) noexcept = default;
|
DigitalRadarDataGeneric::RadialDataBlock&
|
||||||
|
DigitalRadarDataGeneric::RadialDataBlock::operator=(
|
||||||
|
RadialDataBlock&&) noexcept = default;
|
||||||
|
|
||||||
float RadialDataBlock::unambiguous_range() const
|
float DigitalRadarDataGeneric::RadialDataBlock::unambiguous_range() const
|
||||||
{
|
{
|
||||||
return p->unambigiousRange_ / 10.0f;
|
return p->unambigiousRange_ / 10.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<RadialDataBlock>
|
std::shared_ptr<DigitalRadarDataGeneric::RadialDataBlock>
|
||||||
RadialDataBlock::Create(const std::string& dataBlockType,
|
DigitalRadarDataGeneric::RadialDataBlock::Create(
|
||||||
|
const std::string& dataBlockType,
|
||||||
const std::string& dataName,
|
const std::string& dataName,
|
||||||
std::istream& is)
|
std::istream& is)
|
||||||
{
|
{
|
||||||
|
|
@ -465,7 +440,7 @@ RadialDataBlock::Create(const std::string& dataBlockType,
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RadialDataBlock::Parse(std::istream& is)
|
bool DigitalRadarDataGeneric::RadialDataBlock::Parse(std::istream& is)
|
||||||
{
|
{
|
||||||
bool dataBlockValid = true;
|
bool dataBlockValid = true;
|
||||||
|
|
||||||
|
|
@ -495,58 +470,38 @@ bool RadialDataBlock::Parse(std::istream& is)
|
||||||
return dataBlockValid;
|
return dataBlockValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
class DigitalRadarDataGenericImpl
|
class DigitalRadarDataGeneric::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit DigitalRadarDataGenericImpl() :
|
explicit Impl() {};
|
||||||
radarIdentifier_ {},
|
~Impl() = default;
|
||||||
collectionTime_ {0},
|
|
||||||
modifiedJulianDate_ {0},
|
|
||||||
azimuthNumber_ {0},
|
|
||||||
azimuthAngle_ {0.0f},
|
|
||||||
compressionIndicator_ {0},
|
|
||||||
radialLength_ {0},
|
|
||||||
azimuthResolutionSpacing_ {0},
|
|
||||||
radialStatus_ {0},
|
|
||||||
elevationNumber_ {0},
|
|
||||||
cutSectorNumber_ {0},
|
|
||||||
elevationAngle_ {0.0f},
|
|
||||||
radialSpotBlankingStatus_ {0},
|
|
||||||
azimuthIndexingMode_ {0},
|
|
||||||
dataBlockCount_ {0},
|
|
||||||
dataBlockPointer_ {0},
|
|
||||||
volumeDataBlock_ {nullptr},
|
|
||||||
elevationDataBlock_ {nullptr},
|
|
||||||
radialDataBlock_ {nullptr},
|
|
||||||
momentDataBlock_ {} {};
|
|
||||||
~DigitalRadarDataGenericImpl() = default;
|
|
||||||
|
|
||||||
std::string radarIdentifier_;
|
std::string radarIdentifier_ {};
|
||||||
uint32_t collectionTime_;
|
std::uint32_t collectionTime_ {0};
|
||||||
uint16_t modifiedJulianDate_;
|
std::uint16_t modifiedJulianDate_ {0};
|
||||||
uint16_t azimuthNumber_;
|
std::uint16_t azimuthNumber_ {0};
|
||||||
float azimuthAngle_;
|
float azimuthAngle_ {0.0f};
|
||||||
uint8_t compressionIndicator_;
|
std::uint8_t compressionIndicator_ {0};
|
||||||
uint16_t radialLength_;
|
std::uint16_t radialLength_ {0};
|
||||||
uint8_t azimuthResolutionSpacing_;
|
std::uint8_t azimuthResolutionSpacing_ {0};
|
||||||
uint8_t radialStatus_;
|
std::uint8_t radialStatus_ {0};
|
||||||
uint8_t elevationNumber_;
|
std::uint8_t elevationNumber_ {0};
|
||||||
uint8_t cutSectorNumber_;
|
std::uint8_t cutSectorNumber_ {0};
|
||||||
float elevationAngle_;
|
float elevationAngle_ {0.0f};
|
||||||
uint8_t radialSpotBlankingStatus_;
|
std::uint8_t radialSpotBlankingStatus_ {0};
|
||||||
uint8_t azimuthIndexingMode_;
|
std::uint8_t azimuthIndexingMode_ {0};
|
||||||
uint16_t dataBlockCount_;
|
std::uint16_t dataBlockCount_ {0};
|
||||||
std::array<uint32_t, 10> dataBlockPointer_;
|
std::array<std::uint32_t, 10> dataBlockPointer_ {0};
|
||||||
|
|
||||||
std::shared_ptr<VolumeDataBlock> volumeDataBlock_;
|
std::shared_ptr<VolumeDataBlock> volumeDataBlock_ {nullptr};
|
||||||
std::shared_ptr<ElevationDataBlock> elevationDataBlock_;
|
std::shared_ptr<ElevationDataBlock> elevationDataBlock_ {nullptr};
|
||||||
std::shared_ptr<RadialDataBlock> radialDataBlock_;
|
std::shared_ptr<RadialDataBlock> radialDataBlock_ {nullptr};
|
||||||
std::unordered_map<DataBlockType, std::shared_ptr<MomentDataBlock>>
|
std::unordered_map<DataBlockType, std::shared_ptr<MomentDataBlock>>
|
||||||
momentDataBlock_;
|
momentDataBlock_ {};
|
||||||
};
|
};
|
||||||
|
|
||||||
DigitalRadarDataGeneric::DigitalRadarDataGeneric() :
|
DigitalRadarDataGeneric::DigitalRadarDataGeneric() :
|
||||||
Level2Message(), p(std::make_unique<DigitalRadarDataGenericImpl>())
|
Level2Message(), p(std::make_unique<Impl>())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
DigitalRadarDataGeneric::~DigitalRadarDataGeneric() = default;
|
DigitalRadarDataGeneric::~DigitalRadarDataGeneric() = default;
|
||||||
|
|
@ -561,17 +516,17 @@ std::string DigitalRadarDataGeneric::radar_identifier() const
|
||||||
return p->radarIdentifier_;
|
return p->radarIdentifier_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t DigitalRadarDataGeneric::collection_time() const
|
std::uint32_t DigitalRadarDataGeneric::collection_time() const
|
||||||
{
|
{
|
||||||
return p->collectionTime_;
|
return p->collectionTime_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t DigitalRadarDataGeneric::modified_julian_date() const
|
std::uint16_t DigitalRadarDataGeneric::modified_julian_date() const
|
||||||
{
|
{
|
||||||
return p->modifiedJulianDate_;
|
return p->modifiedJulianDate_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t DigitalRadarDataGeneric::azimuth_number() const
|
std::uint16_t DigitalRadarDataGeneric::azimuth_number() const
|
||||||
{
|
{
|
||||||
return p->azimuthNumber_;
|
return p->azimuthNumber_;
|
||||||
}
|
}
|
||||||
|
|
@ -581,32 +536,32 @@ units::degrees<float> DigitalRadarDataGeneric::azimuth_angle() const
|
||||||
return units::degrees<float> {p->azimuthAngle_};
|
return units::degrees<float> {p->azimuthAngle_};
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t DigitalRadarDataGeneric::compression_indicator() const
|
std::uint8_t DigitalRadarDataGeneric::compression_indicator() const
|
||||||
{
|
{
|
||||||
return p->compressionIndicator_;
|
return p->compressionIndicator_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t DigitalRadarDataGeneric::radial_length() const
|
std::uint16_t DigitalRadarDataGeneric::radial_length() const
|
||||||
{
|
{
|
||||||
return p->radialLength_;
|
return p->radialLength_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t DigitalRadarDataGeneric::azimuth_resolution_spacing() const
|
std::uint8_t DigitalRadarDataGeneric::azimuth_resolution_spacing() const
|
||||||
{
|
{
|
||||||
return p->azimuthResolutionSpacing_;
|
return p->azimuthResolutionSpacing_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t DigitalRadarDataGeneric::radial_status() const
|
std::uint8_t DigitalRadarDataGeneric::radial_status() const
|
||||||
{
|
{
|
||||||
return p->radialStatus_;
|
return p->radialStatus_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t DigitalRadarDataGeneric::elevation_number() const
|
std::uint8_t DigitalRadarDataGeneric::elevation_number() const
|
||||||
{
|
{
|
||||||
return p->elevationNumber_;
|
return p->elevationNumber_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t DigitalRadarDataGeneric::cut_sector_number() const
|
std::uint8_t DigitalRadarDataGeneric::cut_sector_number() const
|
||||||
{
|
{
|
||||||
return p->cutSectorNumber_;
|
return p->cutSectorNumber_;
|
||||||
}
|
}
|
||||||
|
|
@ -616,40 +571,40 @@ units::degrees<float> DigitalRadarDataGeneric::elevation_angle() const
|
||||||
return units::degrees<float> {p->elevationAngle_};
|
return units::degrees<float> {p->elevationAngle_};
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t DigitalRadarDataGeneric::radial_spot_blanking_status() const
|
std::uint8_t DigitalRadarDataGeneric::radial_spot_blanking_status() const
|
||||||
{
|
{
|
||||||
return p->radialSpotBlankingStatus_;
|
return p->radialSpotBlankingStatus_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t DigitalRadarDataGeneric::azimuth_indexing_mode() const
|
std::uint8_t DigitalRadarDataGeneric::azimuth_indexing_mode() const
|
||||||
{
|
{
|
||||||
return p->azimuthIndexingMode_;
|
return p->azimuthIndexingMode_;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t DigitalRadarDataGeneric::data_block_count() const
|
std::uint16_t DigitalRadarDataGeneric::data_block_count() const
|
||||||
{
|
{
|
||||||
return p->dataBlockCount_;
|
return p->dataBlockCount_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<ElevationDataBlock>
|
std::shared_ptr<DigitalRadarDataGeneric::ElevationDataBlock>
|
||||||
DigitalRadarDataGeneric::elevation_data_block() const
|
DigitalRadarDataGeneric::elevation_data_block() const
|
||||||
{
|
{
|
||||||
return p->elevationDataBlock_;
|
return p->elevationDataBlock_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<RadialDataBlock>
|
std::shared_ptr<DigitalRadarDataGeneric::RadialDataBlock>
|
||||||
DigitalRadarDataGeneric::radial_data_block() const
|
DigitalRadarDataGeneric::radial_data_block() const
|
||||||
{
|
{
|
||||||
return p->radialDataBlock_;
|
return p->radialDataBlock_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<VolumeDataBlock>
|
std::shared_ptr<DigitalRadarDataGeneric::VolumeDataBlock>
|
||||||
DigitalRadarDataGeneric::volume_data_block() const
|
DigitalRadarDataGeneric::volume_data_block() const
|
||||||
{
|
{
|
||||||
return p->volumeDataBlock_;
|
return p->volumeDataBlock_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<MomentDataBlock>
|
std::shared_ptr<DigitalRadarDataGeneric::MomentDataBlock>
|
||||||
DigitalRadarDataGeneric::moment_data_block(DataBlockType type) const
|
DigitalRadarDataGeneric::moment_data_block(DataBlockType type) const
|
||||||
{
|
{
|
||||||
std::shared_ptr<MomentDataBlock> momentDataBlock = nullptr;
|
std::shared_ptr<MomentDataBlock> momentDataBlock = nullptr;
|
||||||
|
|
@ -668,7 +623,7 @@ bool DigitalRadarDataGeneric::Parse(std::istream& is)
|
||||||
logger_->trace("Parsing Digital Radar Data (Message Type 31)");
|
logger_->trace("Parsing Digital Radar Data (Message Type 31)");
|
||||||
|
|
||||||
bool messageValid = true;
|
bool messageValid = true;
|
||||||
size_t bytesRead = 0;
|
std::size_t bytesRead = 0;
|
||||||
|
|
||||||
std::streampos isBegin = is.tellg();
|
std::streampos isBegin = is.tellg();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue