struct size_visitor : public boost::static_visitor<std::size_t>
{
- std::size_t operator()(const std::string& value) { return value.size() * sizeof(value.front()) * 2; }
- std::size_t operator()(const std::wstring& value) { return value.size() * sizeof(value.front()) * 2; }
- std::size_t operator()(const std::vector<int8_t>& value) { return value.size() * sizeof(value.front()) * 2; }
-
- template<typename T>
- std::size_t operator()(const T&)
- {
- return 64;
- }
+ std::size_t operator()(const bool value) { return sizeof(bool); }
+ std::size_t operator()(const int32_t value) { return sizeof(int64_t); }
+ std::size_t operator()(const uint32_t value) { return sizeof(int64_t); }
+ std::size_t operator()(const int64_t value) { return sizeof(int64_t); }
+ std::size_t operator()(const uint64_t value) { return sizeof(int64_t); }
+ std::size_t operator()(const float value) { return sizeof(float); }
+ std::size_t operator()(const double value) { return sizeof(float); }
+ std::size_t operator()(const std::string& value) { return value.size(); }
+ std::size_t operator()(const std::wstring& value) { return value.size(); }
+ std::size_t operator()(const std::vector<int8_t>& value) { return value.size(); }
};
void write_osc_event(byte_vector& destination, const core::monitor::message& e)
{
try
{
- std::size_t size = 0;
+ std::size_t size = 256; // This should be enough to cover address, padding and meta-data.
size_visitor size_visitor;
BOOST_FOREACH(auto& data, e.data())