From 9af9f028eba08982fe04229ff96d8452331ce7a9 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sat, 14 Dec 2019 16:37:04 -0800 Subject: [PATCH] from_wire_type_value --- src/dataencode.cpp | 22 ++++++++++++++++++++++ src/dataimpl.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/src/dataencode.cpp b/src/dataencode.cpp index bfa0d31..71dcecf 100644 --- a/src/dataencode.cpp +++ b/src/dataencode.cpp @@ -697,6 +697,28 @@ void from_wire_valid(Buffer& buf, TypeStore& ctxt, Value& val) } } +void from_wire_type_value(Buffer& buf, TypeStore& ctxt, Value& val) +{ + std::shared_ptr> descs(new std::vector); + TypeDeserContext dc{*descs, ctxt}; + + from_wire(buf, dc); + if(!buf.good()) + return; + + if(!descs->empty()) { + FieldDesc_calculate_offset(descs->data()); + + std::shared_ptr stype(descs, descs->data()); // alias + val = Value::Helper::build(stype); + + from_wire_full(buf, ctxt, val); + + } else { + val = Value(); + } +} + }} // namespace pvxs::impl #endif // DATAENCODE_H diff --git a/src/dataimpl.h b/src/dataimpl.h index 2f7a9e2..5260b7b 100644 --- a/src/dataimpl.h +++ b/src/dataimpl.h @@ -156,6 +156,8 @@ void from_wire_full(Buffer& buf, TypeStore& ctxt, Value& val); PVXS_API void from_wire_valid(Buffer& buf, TypeStore& ctxt, Value& val); +PVXS_API +void from_wire_type_value(Buffer& buf, TypeStore& ctxt, Value& val); PVXS_API void FieldDesc_calculate_offset(FieldDesc* top);