use std::copy for efficiency

This commit is contained in:
Kevin Matz 2021-08-29 11:06:00 -04:00
parent b934477b19
commit 7a49267125

View File

@ -134,15 +134,17 @@ void address_pair_list::iStream(PDU::Stream stream)
range pr(type_->data_type, type_->address_length); range pr(type_->data_type, type_->address_length);
pr.iStream(stream); pr.iStream(stream);
if (!stream->good() || pr.count * pr.incriment > stream->available()) { if (!stream->good() || stream->available() < pr.count * pr.incriment)
stream->setstate(std::ios_base::failbit); return stream->setstate(std::ios_base::failbit);
return;
}
// Property Data // Property Data
std::vector<uint8_t> pd; std::vector<uint8_t> pd;
for (uint32_t i = 0; i < pr.count * pr.incriment; i ++) std::copy(stream->data(), stream->data() + pr.count * pr.incriment,
pd.push_back(stream->readType<uint8_t>()); std::back_inserter(pd));
stream->ignore(pd.size());
if (!stream->available())
stream->setstate(std::ios_base::eofbit);
// Property Fields // Property Fields
properties.push_back(address_data_pair(pr, pd)); properties.push_back(address_data_pair(pr, pd));