1
0
Fork 0

make uniform the passing address_type

This commit is contained in:
Kevin Matz 2021-08-31 09:01:57 -04:00
parent 09b2210616
commit 7c9c62d0fe
2 changed files with 18 additions and 21 deletions

View File

@ -34,7 +34,7 @@ namespace ACN::DMP {
*/
uint32_t range::read_(PDU::Stream stream)
{
switch (length_) {
switch (type_.address_length) {
case ONE:
return stream->readType<uint8_t>();
case TWO:
@ -54,7 +54,7 @@ uint32_t range::read_(PDU::Stream stream)
*/
void range::write_(PDU::Stream stream, const uint32_t& val) const
{
switch (length_) {
switch (type_.address_length) {
case ONE:
stream->writeType<uint8_t>(val);
case TWO:
@ -70,14 +70,14 @@ void range::write_(PDU::Stream stream, const uint32_t& val) const
size_t range::streamSize() const
{
auto count = [this] () {
switch (type_) {
switch (type_.data_type) {
case SINGLE:
return 1;
default:
return 3;
}
};
return count() * element_length(length_);
return count() * element_length(type_.address_length);
}
@ -88,7 +88,7 @@ size_t range::streamSize() const
void range::iStream(PDU::Stream stream)
{
address = read_(stream);
if (type_ == SINGLE) return;
if (type_.data_type == SINGLE) return;
incriment = read_(stream);
count = read_(stream);
}
@ -101,7 +101,7 @@ void range::iStream(PDU::Stream stream)
void range::oStream(PDU::Stream stream) const
{
write_(stream, address);
if (type_ == SINGLE) return;
if (type_.data_type == SINGLE) return;
write_(stream, incriment);
write_(stream, count);
}
@ -131,7 +131,7 @@ void address_pair_list::iStream(PDU::Stream stream)
{
while(stream->good()) {
// Property Address
range pr(type_->data_type, type_->address_length);
range pr(type_);
pr.iStream(stream);
if (!stream->good() || stream->available() < pr.count * pr.incriment)
@ -189,7 +189,7 @@ void address_list::iStream(PDU::Stream stream)
while(stream->good())
{
// Property Address
addresses.emplace_back(range(type_->data_type, type_->address_length));
addresses.emplace_back(range(type_));
*stream >> addresses.back();
}
}
@ -231,12 +231,12 @@ void Pdu::iStream(PDU::Stream stream)
auto header = static_cast<address_type*>(this->header());
auto dataIsAddressList = [this, header] () {
data_ = new address_list(header);
data_ = new address_list(*header);
*stream_ >> *data_;
};
auto dataIsAdddresPairList = [this, header] () {
data_ = new address_pair_list(header);
data_ = new address_pair_list(*header);
*stream_ >> *data_;
};

View File

@ -106,12 +106,9 @@ struct range
/**
* @brief range
* @param t
* @param l
*/
range(const data_type_t t, const element_length l)
: type_(t)
, length_(l)
{};
range(const address_type& t) : type_(t) {};
uint32_t address = 0; //!< start address
uint32_t incriment = 0; //!< property size (number of octets)
uint32_t count = 0; //!< number of properties
@ -121,8 +118,8 @@ struct range
void oStream(PDU::Stream) const override;
private:
const data_type_t type_;
const element_length length_;
const address_type& type_;
uint32_t read_(PDU::Stream);
void write_(PDU::Stream, const uint32_t&) const;
};
@ -144,7 +141,7 @@ struct address_pair_list
* @brief address_pair_list
* @param t
*/
address_pair_list(const address_type* t) : type_(t) {};
address_pair_list(const address_type& t) : type_(t) {};
std::vector<address_data_pair> properties; //!< list of address/data pairs
size_t streamSize() const override;
@ -152,7 +149,7 @@ struct address_pair_list
void oStream(PDU::Stream) const override;
private:
const address_type* type_;
const address_type& type_;
};
@ -166,7 +163,7 @@ struct address_list
* @brief address_list
* @param t
*/
address_list(const address_type* t) : type_(t) {};
address_list(const address_type& t) : type_(t) {};
std::vector<range> addresses; //!< list of addresses
size_t streamSize() const override;
@ -174,7 +171,7 @@ struct address_list
void oStream(PDU::Stream) const override;
private:
const address_type* type_;
const address_type& type_;
};