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);
std::pair< std::string, boost::shared_ptr< void > > AnnotatedData
A combination of data type and the actual data.
virtual ~RosettaConverter()
std::string serialize(const AnnotatedData &data, std::string &wire)
Serialized the given domain object to the wire.
AnnotatedData deserialize(const std::string &wireType, const std::string &wire)
Deserializes a domain object from a wire type.