Commit 999369cd authored by neverlord's avatar neverlord

write_raw & read_raw

parent e35c957a
...@@ -44,8 +44,6 @@ class binary_deserializer : public deserializer { ...@@ -44,8 +44,6 @@ class binary_deserializer : public deserializer {
const char* pos; const char* pos;
const char* end; const char* end;
void range_check(size_t read_size);
public: public:
binary_deserializer(const char* buf, size_t buf_size); binary_deserializer(const char* buf, size_t buf_size);
...@@ -61,6 +59,7 @@ class binary_deserializer : public deserializer { ...@@ -61,6 +59,7 @@ class binary_deserializer : public deserializer {
void read_tuple(size_t size, void read_tuple(size_t size,
const primitive_type* ptypes, const primitive_type* ptypes,
primitive_variant* storage); primitive_variant* storage);
void read_raw(size_t num_bytes, void* storage);
}; };
......
...@@ -71,6 +71,8 @@ class binary_serializer : public serializer { ...@@ -71,6 +71,8 @@ class binary_serializer : public serializer {
void write_tuple(size_t size, const primitive_variant* values); void write_tuple(size_t size, const primitive_variant* values);
void write_raw(size_t num_bytes, const void* data);
/** /**
* @brief Returns the number of written bytes. * @brief Returns the number of written bytes.
*/ */
......
...@@ -108,6 +108,11 @@ class deserializer { ...@@ -108,6 +108,11 @@ class deserializer {
const primitive_type* ptypes, const primitive_type* ptypes,
primitive_variant* storage ) = 0; primitive_variant* storage ) = 0;
/**
* @brief Reads a raw memory block.
*/
virtual void read_raw(size_t num_bytes, void* storage) = 0;
}; };
/** /**
......
...@@ -85,6 +85,13 @@ class serializer { ...@@ -85,6 +85,13 @@ class serializer {
*/ */
virtual void write_value(const primitive_variant& value) = 0; virtual void write_value(const primitive_variant& value) = 0;
/**
* @brief Writes a raw block of data.
* @param num_bytes The size of @p data in bytes.
* @param data Raw data.
*/
virtual void write_raw(size_t num_bytes, const void* data) = 0;
/** /**
* @brief Writes @p num values as a tuple to the data sink. * @brief Writes @p num values as a tuple to the data sink.
* @param num Size of the array @p values. * @param num Size of the array @p values.
......
...@@ -172,4 +172,10 @@ void binary_deserializer::read_tuple(size_t size, ...@@ -172,4 +172,10 @@ void binary_deserializer::read_tuple(size_t size,
} }
} }
void binary_deserializer::read_raw(size_t num_bytes, void* storage) {
range_check(pos, end, num_bytes);
memcpy(&storage, pos, num_bytes);
pos += num_bytes;
}
} // namespace cppa } // namespace cppa
...@@ -171,6 +171,12 @@ void binary_serializer::write_value(const primitive_variant& value) { ...@@ -171,6 +171,12 @@ void binary_serializer::write_value(const primitive_variant& value) {
value.apply(detail::binary_writer(this)); value.apply(detail::binary_writer(this));
} }
void binary_serializer::write_raw(size_t num_bytes, const void* data) {
acquire(num_bytes);
memcpy(m_wr_pos, data, num_bytes);
m_wr_pos += num_bytes;
}
void binary_serializer::write_tuple(size_t size, void binary_serializer::write_tuple(size_t size,
const primitive_variant* values) { const primitive_variant* values) {
const primitive_variant* end = values + size; const primitive_variant* end = values + size;
......
...@@ -155,6 +155,11 @@ class string_serializer : public serializer { ...@@ -155,6 +155,11 @@ class string_serializer : public serializer {
out << (m_after_value ? " }" : "}"); out << (m_after_value ? " }" : "}");
} }
void write_raw(size_t, const void*) {
throw std::runtime_error("string_serializer::write_raw: "
"not implemented yet");
}
}; };
class string_deserializer : public deserializer { class string_deserializer : public deserializer {
...@@ -417,6 +422,11 @@ class string_deserializer : public deserializer { ...@@ -417,6 +422,11 @@ class string_deserializer : public deserializer {
consume('}'); consume('}');
} }
void read_raw(size_t, void*) {
throw std::runtime_error("string_deserializer::read_raw: "
"not implemented yet");
}
}; };
} // namespace <anonymous> } // namespace <anonymous>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment