29 #include <boost/cstdint.hpp>
30 #include <boost/format.hpp>
32 #include <rosetta/api.h>
35 #include "rsb/rsbexports.h"
48 template <
typename Mechanism,
63 template <
typename Mechanism,
67 Converter<std::string>(rsc::runtime::typeName<DataType>(),
68 boost::str(boost::format(
"rosetta<%1%,%2%>")
70 % WireSchema::name())) {
73 template <
typename Mechanism,
79 template <
typename Mechanism,
83 std::string& wireData) {
84 assert(data.first == getDataType());
86 boost::shared_ptr<DataType>
object
87 = boost::static_pointer_cast<DataType>(data.second);
88 boost::uint64_t size = rosetta::packedSize<Mechanism, WireSchema>(*object);
89 wireData.resize(size);
91 std::vector<unsigned char> temp(size);
92 rosetta::pack<Mechanism, WireSchema>(*object, temp, 0, size);
93 memcpy((
void*) &wireData[0], (
void*) &temp[0], size);
95 return getWireSchema();
98 template <
typename Mechanism,
103 const std::string& wireData) {
104 assert(wireSchema == getWireSchema());
106 boost::shared_ptr<DataType> result(
new DataType());
108 std::vector<unsigned char> data(wireData.size());
109 memcpy((
void*) &data[0], (
void*) &wireData[0], wireData.size());
110 rosetta::unpack<Mechanism, WireSchema>(data, *result, 0, wireData.size());
112 return std::make_pair(getDataType(), result);