Commit 22541dc5 authored by neverlord's avatar neverlord

util::duration type info

parent 00525dd1
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "cppa/intrusive_ptr.hpp" #include "cppa/intrusive_ptr.hpp"
#include "cppa/uniform_type_info.hpp" #include "cppa/uniform_type_info.hpp"
#include "cppa/util/duration.hpp"
#include "cppa/util/void_type.hpp" #include "cppa/util/void_type.hpp"
#include "cppa/util/enable_if.hpp" #include "cppa/util/enable_if.hpp"
#include "cppa/util/disable_if.hpp" #include "cppa/util/disable_if.hpp"
...@@ -516,6 +517,50 @@ class atom_value_tinfo : public util::abstract_uniform_type_info<atom_value> ...@@ -516,6 +517,50 @@ class atom_value_tinfo : public util::abstract_uniform_type_info<atom_value>
}; };
class duration_tinfo : public util::abstract_uniform_type_info<util::duration>
{
virtual void serialize(const void* instance, serializer* sink) const
{
auto val = reinterpret_cast<const util::duration*>(instance);
sink->begin_object(name());
sink->write_value(static_cast<std::uint32_t>(val->unit));
sink->write_value(val->count);
sink->end_object();
}
virtual void deserialize(void* instance, deserializer* source) const
{
auto val = reinterpret_cast<util::duration*>(instance);
auto tname = source->seek_object();
if (tname != name()) throw 42;
source->begin_object(tname);
auto unit_val = source->read_value(pt_uint32);
auto count_val = source->read_value(pt_uint32);
source->end_object();
switch (get<std::uint32_t>(unit_val))
{
case 1:
val->unit = util::time_unit::seconds;
break;
case 1000:
val->unit = util::time_unit::milliseconds;
break;
case 1000000:
val->unit = util::time_unit::microseconds;
break;
default:
val->unit = util::time_unit::none;
break;
}
val->count = get<std::uint32_t>(count_val);
}
};
const std::map<int, std::pair<string_set, string_set>>& int_names(); const std::map<int, std::pair<string_set, string_set>>& int_names();
template<typename T> template<typename T>
...@@ -594,6 +639,7 @@ class uniform_type_info_map ...@@ -594,6 +639,7 @@ class uniform_type_info_map
insert<std::string>(); insert<std::string>();
insert<std::u16string>(); insert<std::u16string>();
insert<std::u32string>(); insert<std::u32string>();
insert(new duration_tinfo, { raw_name<util::duration>() });
insert(new any_tuple_tinfo, { raw_name<any_tuple>() }); insert(new any_tuple_tinfo, { raw_name<any_tuple>() });
insert(new actor_ptr_tinfo, { raw_name<actor_ptr>() }); insert(new actor_ptr_tinfo, { raw_name<actor_ptr>() });
insert(new group_ptr_tinfo, { raw_name<actor_ptr>() }); insert(new group_ptr_tinfo, { raw_name<actor_ptr>() });
......
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