2 #include <ossia/network/osc/detail/osc_utils.hpp>
3 #include <ossia/network/value/value.hpp>
5 #include <boost/endian/conversion.hpp>
7 #include <oscpack/osc/OscOutboundPacketStream.h>
8 #include <oscpack/osc/OscTypes.h>
17 struct osc_common_outbound_dynamic_policy
19 oscpack::OutboundPacketStream& p;
22 void operator()(int32_t i)
const { p << i; }
24 void operator()(
float f)
const { p << f; }
26 void operator()(
const std::string& str)
const { p << (std::string_view)str; }
28 void operator()(oscpack::Blob str)
const { p << str; }
30 void operator()(vec2f vec)
const { p << vec[0] << vec[1]; }
32 void operator()(vec3f vec)
const { p << vec[0] << vec[1] << vec[2]; }
34 void operator()(vec4f vec)
const { p << vec[0] << vec[1] << vec[2] << vec[3]; }
36 void operator()()
const { }
42 struct osc_common_outbound_static_policy
45 std::size_t operator()(
char* buffer,
float v)
const noexcept
48 buffer[1] = oscpack::FLOAT_TYPE_TAG;
52 boost::endian::endian_store<float, 4, boost::endian::order::big>(
53 (
unsigned char*)buffer + 4, v);
57 std::size_t operator()(
char* buffer, int32_t v)
const noexcept
60 buffer[1] = oscpack::INT32_TYPE_TAG;
64 boost::endian::endian_store<int32_t, 4, boost::endian::order::big>(
65 (
unsigned char*)buffer + 4, v);
69 std::size_t operator()(
char* buffer,
const std::string& v)
const noexcept
72 buffer[1] = oscpack::STRING_TYPE_TAG;
76 std::size_t written = write_string(v, buffer + 4);
80 std::size_t operator()(
char* buffer,
const oscpack::Blob& v)
const noexcept
83 buffer[1] = oscpack::BLOB_TYPE_TAG;
88 = write_string(std::string_view((
const char*)v.data, v.size), buffer + 4);
92 std::size_t operator()(
char* buffer, vec2f v)
const noexcept
95 buffer[1] = oscpack::FLOAT_TYPE_TAG;
96 buffer[2] = oscpack::FLOAT_TYPE_TAG;
99 boost::endian::endian_store<float, 4, boost::endian::order::big>(
100 (
unsigned char*)buffer + 4, v[0]);
101 boost::endian::endian_store<float, 4, boost::endian::order::big>(
102 (
unsigned char*)buffer + 8, v[1]);
107 std::size_t operator()(
char* buffer, vec3f v)
const noexcept
110 buffer[1] = oscpack::FLOAT_TYPE_TAG;
111 buffer[2] = oscpack::FLOAT_TYPE_TAG;
112 buffer[3] = oscpack::FLOAT_TYPE_TAG;
118 boost::endian::endian_store<float, 4, boost::endian::order::big>(
119 (
unsigned char*)buffer + 8, v[0]);
120 boost::endian::endian_store<float, 4, boost::endian::order::big>(
121 (
unsigned char*)buffer + 12, v[1]);
122 boost::endian::endian_store<float, 4, boost::endian::order::big>(
123 (
unsigned char*)buffer + 16, v[2]);
128 std::size_t operator()(
char* buffer, vec4f v)
const noexcept
131 buffer[1] = oscpack::FLOAT_TYPE_TAG;
132 buffer[2] = oscpack::FLOAT_TYPE_TAG;
133 buffer[3] = oscpack::FLOAT_TYPE_TAG;
134 buffer[4] = oscpack::FLOAT_TYPE_TAG;
139 boost::endian::endian_store<float, 4, boost::endian::order::big>(
140 (
unsigned char*)buffer + 8, v[0]);
141 boost::endian::endian_store<float, 4, boost::endian::order::big>(
142 (
unsigned char*)buffer + 12, v[1]);
143 boost::endian::endian_store<float, 4, boost::endian::order::big>(
144 (
unsigned char*)buffer + 16, v[2]);
145 boost::endian::endian_store<float, 4, boost::endian::order::big>(
146 (
unsigned char*)buffer + 20, v[3]);
Definition: dataspace.hpp:24