use std::copy for efficiency
This commit is contained in:
parent
b934477b19
commit
7a49267125
@ -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));
|
||||||
|
Loading…
Reference in New Issue
Block a user