stream operator overloads for pdu_stream_object.
This commit is contained in:
parent
e5539ffc37
commit
1c9f1e3769
13
acn/dmp.cpp
13
acn/dmp.cpp
@ -163,7 +163,7 @@ void address_pair_list::oStream(PDU::Stream stream) const
|
|||||||
{
|
{
|
||||||
for (const auto & [range, vect] : properties)
|
for (const auto & [range, vect] : properties)
|
||||||
{
|
{
|
||||||
range.oStream(stream);
|
*stream << range;
|
||||||
for (uint8_t d : vect)
|
for (uint8_t d : vect)
|
||||||
*stream << d;
|
*stream << d;
|
||||||
}
|
}
|
||||||
@ -191,9 +191,8 @@ void address_list::iStream(PDU::Stream stream)
|
|||||||
while(stream->good())
|
while(stream->good())
|
||||||
{
|
{
|
||||||
// Property Address
|
// Property Address
|
||||||
range pr(type_->type, type_->width);
|
addresses.emplace_back(range(type_->type, type_->width));
|
||||||
pr.iStream(stream);
|
*stream >> addresses.back();
|
||||||
addresses.push_back(pr);
|
|
||||||
|
|
||||||
//set EOF if buffer insufficient for another property range
|
//set EOF if buffer insufficient for another property range
|
||||||
if (stream->available() < address_width(type_->width) *
|
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
|
void address_list::oStream(PDU::Stream stream) const
|
||||||
{
|
{
|
||||||
for (const auto & addr : addresses)
|
for (const auto & addr : addresses)
|
||||||
addr.oStream(stream);
|
*stream << addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -239,12 +238,12 @@ void Pdu::iStream(PDU::Stream stream)
|
|||||||
|
|
||||||
auto dataIsAddressList = [this, header] () {
|
auto dataIsAddressList = [this, header] () {
|
||||||
data_ = new address_list(header);
|
data_ = new address_list(header);
|
||||||
data_->iStream(stream_);
|
*stream_ >> *data_;
|
||||||
};
|
};
|
||||||
|
|
||||||
auto dataIsAdddresPairList = [this, header] () {
|
auto dataIsAdddresPairList = [this, header] () {
|
||||||
data_ = new address_pair_list(header);
|
data_ = new address_pair_list(header);
|
||||||
data_->iStream(stream_);
|
*stream_ >> *data_;
|
||||||
};
|
};
|
||||||
|
|
||||||
switch(vector()) {
|
switch(vector()) {
|
||||||
|
@ -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 >>
|
* @brief pdu_stream::operator >>
|
||||||
* @param val
|
* @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 <<
|
* @brief pdu_stream::operator <<
|
||||||
* @param val
|
* @param val
|
||||||
|
@ -31,11 +31,14 @@
|
|||||||
namespace ACN {
|
namespace ACN {
|
||||||
namespace PDU {
|
namespace PDU {
|
||||||
|
|
||||||
|
struct pdu_stream_object;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Input/Output stream of nested PDU
|
* @brief Input/Output stream of nested PDU
|
||||||
*/
|
*/
|
||||||
class pdu_stream
|
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 std::basic_iostream<uint8_t>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -44,6 +47,7 @@ public:
|
|||||||
// input sequence
|
// input sequence
|
||||||
uint32_t available() { return in_avail(); }
|
uint32_t available() { return in_avail(); }
|
||||||
uint8_t * data() { return gptr(); }
|
uint8_t * data() { return gptr(); }
|
||||||
|
pdu_stream& operator>> (pdu_stream_object& obj);
|
||||||
pdu_stream& operator>> (uint8_t& val);
|
pdu_stream& operator>> (uint8_t& val);
|
||||||
pdu_stream& operator>> (uint16_t& val);
|
pdu_stream& operator>> (uint16_t& val);
|
||||||
pdu_stream& operator>> (uint32_t& val);
|
pdu_stream& operator>> (uint32_t& val);
|
||||||
@ -70,6 +74,7 @@ public:
|
|||||||
// output sequence
|
// output sequence
|
||||||
uint32_t size() { return pptr() - pbase(); }
|
uint32_t size() { return pptr() - pbase(); }
|
||||||
uint8_t * base() { return 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 uint8_t& val);
|
||||||
pdu_stream& operator<< (const uint16_t& val);
|
pdu_stream& operator<< (const uint16_t& val);
|
||||||
pdu_stream& operator<< (const uint32_t& val);
|
pdu_stream& operator<< (const uint32_t& val);
|
||||||
|
@ -63,8 +63,7 @@ void transport::iStream(PDU::Stream stream)
|
|||||||
return stream->setstate(std::ios_base::failbit);
|
return stream->setstate(std::ios_base::failbit);
|
||||||
|
|
||||||
*stream >> length;
|
*stream >> length;
|
||||||
|
*stream >> root;
|
||||||
root.iStream(stream);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ void transport::iStream(PDU::Stream stream)
|
|||||||
if (length > PREAMBLE_MINIMUM_SIZE)
|
if (length > PREAMBLE_MINIMUM_SIZE)
|
||||||
stream->ignore((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 << postamble_size;
|
||||||
stream->write(acn_id, sizeof(acn_id));
|
stream->write(acn_id, sizeof(acn_id));
|
||||||
for ( auto& pdu : *root.pdu )
|
for ( auto& pdu : *root.pdu )
|
||||||
pdu->oStream(stream);
|
*stream << pdu;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // UDP
|
} // UDP
|
||||||
|
@ -142,7 +142,7 @@ void name_data::iStream(PDU::Stream stream)
|
|||||||
while (stream->good())
|
while (stream->good())
|
||||||
{
|
{
|
||||||
points.push_back(point_description());
|
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 << flags;
|
||||||
*stream << reserved;
|
*stream << reserved;
|
||||||
for (const auto & p : points)
|
for (const auto & p : points)
|
||||||
p.oStream(stream);
|
*stream << p;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Name
|
} // namespace Name
|
||||||
@ -248,7 +248,7 @@ void advertisement_data::iStream(PDU::Stream stream)
|
|||||||
void advertisement_data::oStream(PDU::Stream stream) const
|
void advertisement_data::oStream(PDU::Stream stream) const
|
||||||
{
|
{
|
||||||
*stream << reserved;
|
*stream << reserved;
|
||||||
payload->oStream(stream);
|
*stream << payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace OTP::Advertisement
|
} // namespace OTP::Advertisement
|
||||||
|
@ -74,7 +74,7 @@ void base_data::oStream(PDU::Stream stream) const
|
|||||||
*stream << options;
|
*stream << options;
|
||||||
*stream << reserved;
|
*stream << reserved;
|
||||||
stream->writeString(name, 32);
|
stream->writeString(name, 32);
|
||||||
payload->oStream(stream);
|
*stream << payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ void client_connect_data::iStream(ACN::PDU::Stream stream)
|
|||||||
*stream >> version;
|
*stream >> version;
|
||||||
stream->readString(searchDomain, 231);
|
stream->readString(searchDomain, 231);
|
||||||
*stream >> flags.byte;
|
*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 << version;
|
||||||
stream->writeString(searchDomain, 231);
|
stream->writeString(searchDomain, 231);
|
||||||
*stream << flags.byte;
|
*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)
|
void client_entry_update_data::iStream(ACN::PDU::Stream stream)
|
||||||
{
|
{
|
||||||
*stream >> flags.byte;
|
*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
|
void client_entry_update_data::oStream(ACN::PDU::Stream stream) const
|
||||||
{
|
{
|
||||||
*stream << flags.byte;
|
*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())
|
while (stream->good())
|
||||||
{
|
{
|
||||||
list.emplace_back(dynamic_uid_request());
|
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
|
void request_dynamic_uid_data::oStream(ACN::PDU::Stream stream) const
|
||||||
{
|
{
|
||||||
for (const auto & r : list)
|
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())
|
while (stream->good())
|
||||||
{
|
{
|
||||||
list.emplace_back(dynamic_uid_mapping());
|
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
|
void dynamic_uid_assignment_data::oStream(ACN::PDU::Stream stream) const
|
||||||
{
|
{
|
||||||
for (const auto & r : list)
|
for (const auto & r : list)
|
||||||
r.oStream(stream);
|
*stream << r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ void llrp_data::oStream(ACN::PDU::Stream stream) const
|
|||||||
*stream << destination;
|
*stream << destination;
|
||||||
*stream << transaction;
|
*stream << transaction;
|
||||||
if (child)
|
if (child)
|
||||||
child->oStream(stream);
|
*stream << child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
|
|||||||
case VECTOR_LLRP_PROBE_REQUEST:
|
case VECTOR_LLRP_PROBE_REQUEST:
|
||||||
{
|
{
|
||||||
auto block = ACN::PDU::Block<ProbeRequest::Pdu>();
|
auto block = ACN::PDU::Block<ProbeRequest::Pdu>();
|
||||||
block.iStream(stream_);
|
*stream_ >> block;
|
||||||
if (!block.pdu->empty())
|
if (!block.pdu->empty())
|
||||||
payload->child = block.pdu->front();
|
payload->child = block.pdu->front();
|
||||||
}
|
}
|
||||||
@ -89,7 +89,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
|
|||||||
case VECTOR_LLRP_PROBE_REPLY:
|
case VECTOR_LLRP_PROBE_REPLY:
|
||||||
{
|
{
|
||||||
auto block = ACN::PDU::Block<ProbeReply::Pdu>();
|
auto block = ACN::PDU::Block<ProbeReply::Pdu>();
|
||||||
block.iStream(stream_);
|
*stream_ >> block;
|
||||||
if (!block.pdu->empty())
|
if (!block.pdu->empty())
|
||||||
payload->child = block.pdu->front();
|
payload->child = block.pdu->front();
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
|
|||||||
case VECTOR_LLRP_RDM_CMD:
|
case VECTOR_LLRP_RDM_CMD:
|
||||||
{
|
{
|
||||||
auto block = ACN::PDU::Block<RPT::COMMAND::Pdu>();
|
auto block = ACN::PDU::Block<RPT::COMMAND::Pdu>();
|
||||||
block.iStream(stream_);
|
*stream_ >> block;
|
||||||
if (!block.pdu->empty())
|
if (!block.pdu->empty())
|
||||||
payload->child = block.pdu->front();
|
payload->child = block.pdu->front();
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
|
|||||||
RDMnet::Pdu::iStream(stream); // flags, length, and vector
|
RDMnet::Pdu::iStream(stream); // flags, length, and vector
|
||||||
// hase no header // header
|
// hase no header // header
|
||||||
data_ = new COMMAND::Pdu(); // data
|
data_ = new COMMAND::Pdu(); // data
|
||||||
data_->iStream(stream_);
|
*stream_ >> *data_;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace REQUEST
|
} // namespace REQUEST
|
||||||
@ -261,7 +261,7 @@ void Pdu::iStream(ACN::PDU::Stream stream)
|
|||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data->pdu->iStream(stream_);
|
*stream >> *data->pdu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -311,11 +311,8 @@ void rpt_data::oStream(ACN::PDU::Stream stream) const
|
|||||||
{
|
{
|
||||||
*stream << sequence;
|
*stream << sequence;
|
||||||
stream->writeType<typeof(reserved)>(0);
|
stream->writeType<typeof(reserved)>(0);
|
||||||
pdu->oStream(stream);
|
*stream << pdu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace RPT
|
} // namespace RPT
|
||||||
} // namespace RDMnet
|
} // namespace RDMnet
|
||||||
|
Loading…
Reference in New Issue
Block a user