1
0
Fork 0

stream operator overloads for pdu_stream_object.

This commit is contained in:
Kevin Matz 2021-08-20 09:58:59 -04:00
parent e5539ffc37
commit 1c9f1e3769
10 changed files with 58 additions and 34 deletions

View File

@ -163,7 +163,7 @@ void address_pair_list::oStream(PDU::Stream stream) const
{
for (const auto & [range, vect] : properties)
{
range.oStream(stream);
*stream << range;
for (uint8_t d : vect)
*stream << d;
}
@ -191,9 +191,8 @@ void address_list::iStream(PDU::Stream stream)
while(stream->good())
{
// Property Address
range pr(type_->type, type_->width);
pr.iStream(stream);
addresses.push_back(pr);
addresses.emplace_back(range(type_->type, type_->width));
*stream >> addresses.back();
//set EOF if buffer insufficient for another property range
if (stream->available() < address_width(type_->width) *
@ -209,7 +208,7 @@ void address_list::iStream(PDU::Stream stream)
void address_list::oStream(PDU::Stream stream) const
{
for (const auto & addr : addresses)
addr.oStream(stream);
*stream << addr;
}
@ -239,12 +238,12 @@ void Pdu::iStream(PDU::Stream stream)
auto dataIsAddressList = [this, header] () {
data_ = new address_list(header);
data_->iStream(stream_);
*stream_ >> *data_;
};
auto dataIsAdddresPairList = [this, header] () {
data_ = new address_pair_list(header);
data_->iStream(stream_);
*stream_ >> *data_;
};
switch(vector()) {

View File

@ -76,6 +76,18 @@ void pdu_stream::writeString(const std::string &str, const int fixed_length)
}
/**
* @brief pdu_stream::operator >>
* @param obj
* @return
*/
pdu_stream& pdu_stream::operator>> (pdu_stream_object& obj)
{
obj.iStream(shared_from_this());
return *this;
}
/**
* @brief pdu_stream::operator >>
* @param val
@ -143,6 +155,18 @@ pdu_stream& pdu_stream::operator>> (UUID::uuid& uuid)
};
/**
* @brief pdu_stream::operator <<
* @param obj
* @return
*/
pdu_stream& pdu_stream::operator<< (const pdu_stream_object& obj)
{
obj.oStream(shared_from_this());
return *this;
}
/**
* @brief pdu_stream::operator <<
* @param val

View File

@ -31,11 +31,14 @@
namespace ACN {
namespace PDU {
struct pdu_stream_object;
/**
* @brief Input/Output stream of nested PDU
*/
class pdu_stream
: private std::basic_streambuf<uint8_t>
: public std::enable_shared_from_this<pdu_stream>
, private std::basic_streambuf<uint8_t>
, public std::basic_iostream<uint8_t>
{
public:
@ -44,6 +47,7 @@ public:
// input sequence
uint32_t available() { return in_avail(); }
uint8_t * data() { return gptr(); }
pdu_stream& operator>> (pdu_stream_object& obj);
pdu_stream& operator>> (uint8_t& val);
pdu_stream& operator>> (uint16_t& val);
pdu_stream& operator>> (uint32_t& val);
@ -70,6 +74,7 @@ public:
// output sequence
uint32_t size() { return pptr() - pbase(); }
uint8_t * base() { return pbase(); }
pdu_stream& operator<< (const pdu_stream_object& obj);
pdu_stream& operator<< (const uint8_t& val);
pdu_stream& operator<< (const uint16_t& val);
pdu_stream& operator<< (const uint32_t& val);

View File

@ -63,8 +63,7 @@ void transport::iStream(PDU::Stream stream)
return stream->setstate(std::ios_base::failbit);
*stream >> length;
root.iStream(stream);
*stream >> root;
}

View File

@ -85,7 +85,7 @@ void transport::iStream(PDU::Stream stream)
if (length > PREAMBLE_MINIMUM_SIZE)
stream->ignore((length - PREAMBLE_MINIMUM_SIZE));
root.iStream(stream);
*stream >> root;
}
@ -99,7 +99,7 @@ void transport::oStream(PDU::Stream stream) const
*stream << postamble_size;
stream->write(acn_id, sizeof(acn_id));
for ( auto& pdu : *root.pdu )
pdu->oStream(stream);
*stream << pdu;
}
} // UDP

View File

@ -142,7 +142,7 @@ void name_data::iStream(PDU::Stream stream)
while (stream->good())
{
points.push_back(point_description());
points.back().iStream(stream);
*stream >> points.back();
}
}
@ -156,7 +156,7 @@ void name_data::oStream(PDU::Stream stream) const
*stream << flags;
*stream << reserved;
for (const auto & p : points)
p.oStream(stream);
*stream << p;
}
} // namespace Name
@ -248,7 +248,7 @@ void advertisement_data::iStream(PDU::Stream stream)
void advertisement_data::oStream(PDU::Stream stream) const
{
*stream << reserved;
payload->oStream(stream);
*stream << payload;
}
} // namespace OTP::Advertisement

View File

@ -74,7 +74,7 @@ void base_data::oStream(PDU::Stream stream) const
*stream << options;
*stream << reserved;
stream->writeString(name, 32);
payload->oStream(stream);
*stream << payload;
}

View File

@ -105,7 +105,7 @@ void client_connect_data::iStream(ACN::PDU::Stream stream)
*stream >> version;
stream->readString(searchDomain, 231);
*stream >> flags.byte;
pdu->iStream(stream);
*stream >> *pdu;
}
@ -119,7 +119,7 @@ void client_connect_data::oStream(ACN::PDU::Stream stream) const
*stream << version;
stream->writeString(searchDomain, 231);
*stream << flags.byte;
pdu->oStream(stream);
*stream << pdu;
}
@ -156,7 +156,7 @@ void connect_reply_data::oStream(ACN::PDU::Stream stream) const
void client_entry_update_data::iStream(ACN::PDU::Stream stream)
{
*stream >> flags.byte;
pdu->iStream(stream);
*stream >> *pdu;
}
@ -167,7 +167,7 @@ void client_entry_update_data::iStream(ACN::PDU::Stream stream)
void client_entry_update_data::oStream(ACN::PDU::Stream stream) const
{
*stream << flags.byte;
pdu->oStream(stream);
*stream << pdu;
}
@ -248,7 +248,7 @@ void request_dynamic_uid_data::iStream(ACN::PDU::Stream stream)
while (stream->good())
{
list.emplace_back(dynamic_uid_request());
list.back().iStream(stream);
*stream >> list.back();
}
}
@ -260,7 +260,7 @@ void request_dynamic_uid_data::iStream(ACN::PDU::Stream stream)
void request_dynamic_uid_data::oStream(ACN::PDU::Stream stream) const
{
for (const auto & r : list)
r.oStream(stream);
*stream << r;
}
@ -297,7 +297,7 @@ void dynamic_uid_assignment_data::iStream(ACN::PDU::Stream stream)
while (stream->good())
{
list.emplace_back(dynamic_uid_mapping());
list.back().iStream(stream);
*stream >> list.back();
}
}
@ -309,7 +309,7 @@ void dynamic_uid_assignment_data::iStream(ACN::PDU::Stream stream)
void dynamic_uid_assignment_data::oStream(ACN::PDU::Stream stream) const
{
for (const auto & r : list)
r.oStream(stream);
*stream << r;
}

View File

@ -53,7 +53,7 @@ void llrp_data::oStream(ACN::PDU::Stream stream) const
*stream << destination;
*stream << transaction;
if (child)
child->oStream(stream);
*stream << child;
}
@ -81,7 +81,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
case VECTOR_LLRP_PROBE_REQUEST:
{
auto block = ACN::PDU::Block<ProbeRequest::Pdu>();
block.iStream(stream_);
*stream_ >> block;
if (!block.pdu->empty())
payload->child = block.pdu->front();
}
@ -89,7 +89,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
case VECTOR_LLRP_PROBE_REPLY:
{
auto block = ACN::PDU::Block<ProbeReply::Pdu>();
block.iStream(stream_);
*stream_ >> block;
if (!block.pdu->empty())
payload->child = block.pdu->front();
}
@ -97,7 +97,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
case VECTOR_LLRP_RDM_CMD:
{
auto block = ACN::PDU::Block<RPT::COMMAND::Pdu>();
block.iStream(stream_);
*stream_ >> block;
if (!block.pdu->empty())
payload->child = block.pdu->front();
}

View File

@ -51,7 +51,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
RDMnet::Pdu::iStream(stream); // flags, length, and vector
// hase no header // header
data_ = new COMMAND::Pdu(); // data
data_->iStream(stream_);
*stream_ >> *data_;
}
} // namespace REQUEST
@ -261,7 +261,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
default:
return;
}
data->pdu->iStream(stream_);
*stream >> *data->pdu;
}
@ -311,11 +311,8 @@ void rpt_data::oStream(ACN::PDU::Stream stream) const
{
*stream << sequence;
stream->writeType<typeof(reserved)>(0);
pdu->oStream(stream);
*stream << pdu;
}
} // namespace RPT
} // namespace RDMnet