Commit 999369cd authored by neverlord's avatar neverlord

write_raw & read_raw

parent e35c957a
......@@ -44,8 +44,6 @@ class binary_deserializer : public deserializer {
const char* pos;
const char* end;
void range_check(size_t read_size);
public:
binary_deserializer(const char* buf, size_t buf_size);
......@@ -61,6 +59,7 @@ class binary_deserializer : public deserializer {
void read_tuple(size_t size,
const primitive_type* ptypes,
primitive_variant* storage);
void read_raw(size_t num_bytes, void* storage);
};
......
......@@ -71,6 +71,8 @@ class binary_serializer : public serializer {
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.
*/
......
......@@ -108,6 +108,11 @@ class deserializer {
const primitive_type* ptypes,
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 {
*/
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.
* @param num Size of the array @p values.
......
......@@ -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
......@@ -171,6 +171,12 @@ void binary_serializer::write_value(const primitive_variant& value) {
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,
const primitive_variant* values) {
const primitive_variant* end = values + size;
......
......@@ -155,6 +155,11 @@ class string_serializer : public serializer {
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 {
......@@ -417,6 +422,11 @@ class string_deserializer : public deserializer {
consume('}');
}
void read_raw(size_t, void*) {
throw std::runtime_error("string_deserializer::read_raw: "
"not implemented yet");
}
};
} // 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