From 7a492671259122b00fbde0f9e3ba774a39e780cb Mon Sep 17 00:00:00 2001 From: Kevin Matz Date: Sun, 29 Aug 2021 11:06:00 -0400 Subject: [PATCH] use std::copy for efficiency --- protocols/dmp/dmp.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/protocols/dmp/dmp.cpp b/protocols/dmp/dmp.cpp index 0def55a..097bb23 100644 --- a/protocols/dmp/dmp.cpp +++ b/protocols/dmp/dmp.cpp @@ -134,15 +134,17 @@ void address_pair_list::iStream(PDU::Stream stream) range pr(type_->data_type, type_->address_length); pr.iStream(stream); - if (!stream->good() || pr.count * pr.incriment > stream->available()) { - stream->setstate(std::ios_base::failbit); - return; - } + if (!stream->good() || stream->available() < pr.count * pr.incriment) + return stream->setstate(std::ios_base::failbit); // Property Data std::vector pd; - for (uint32_t i = 0; i < pr.count * pr.incriment; i ++) - pd.push_back(stream->readType()); + std::copy(stream->data(), stream->data() + pr.count * pr.incriment, + std::back_inserter(pd)); + stream->ignore(pd.size()); + + if (!stream->available()) + stream->setstate(std::ios_base::eofbit); // Property Fields properties.push_back(address_data_pair(pr, pd));