2#include <ossia/network/osc/detail/osc_common_policy.hpp> 
    3#include <ossia/network/osc/detail/osc_utils.hpp> 
    4#include <ossia/network/value/value.hpp> 
    6#include <boost/endian/conversion.hpp> 
    8#include <oscpack/osc/OscOutboundPacketStream.h> 
    9#include <oscpack/osc/OscTypes.h> 
   14struct osc_extended_outbound_dynamic_policy : osc_common_outbound_dynamic_policy
 
   16  using osc_common_outbound_dynamic_policy::operator();
 
   17  mutable int m_depth = 0;
 
   18  void operator()(impulse)
 const { p << oscpack::Infinitum(); }
 
   20  void operator()(
bool b)
 const { p << b; }
 
   22  void operator()(
char c)
 const { p << c; }
 
   24  void operator()(vec2f vec)
 const 
   28      p << oscpack::BeginArray();
 
   31    p << vec[0] << vec[1];
 
   35      p << oscpack::EndArray();
 
   39  void operator()(vec3f vec)
 const 
   43      p << oscpack::BeginArray();
 
   46    p << vec[0] << vec[1] << vec[2];
 
   50      p << oscpack::EndArray();
 
   54  void operator()(vec4f vec)
 const 
   56    if(unit == ossia::rgba8_u{})
 
   58      p << to_osc_rgba({vec});
 
   64        p << oscpack::BeginArray();
 
   67      p << vec[0] << vec[1] << vec[2] << vec[3];
 
   71        p << oscpack::EndArray();
 
   77  void operator()(
const std::vector<value>& t)
 const 
   81      p << oscpack::BeginArray();
 
   85    for(
const auto& val : t)
 
   93      p << oscpack::EndArray();
 
   97  void operator()(
const value_map_type& t)
 const 
  101      p << oscpack::BeginArray();
 
  105    for(
const auto& [k, v] : t)
 
  107      p << oscpack::BeginArray();
 
  112      p << oscpack::EndArray();
 
  118      p << oscpack::EndArray();
 
  123struct osc_extended_outbound_static_policy : osc_common_outbound_static_policy
 
  125  using osc_common_outbound_static_policy::operator();
 
  126  std::size_t operator()(
 
  132      buffer[1] = oscpack::INFINITUM_TYPE_TAG;
 
  134      buffer[1] = oscpack::NIL_TYPE_TAG;
 
  135    else if(t == 
"empty")
 
  143  std::size_t operator()(
char* buffer, ossia::impulse v) 
const noexcept 
  154  std::size_t operator()(
char* buffer, 
bool v) 
const noexcept 
  157    buffer[1] = v ? oscpack::TRUE_TYPE_TAG : oscpack::FALSE_TYPE_TAG;
 
  164  std::size_t operator()(
char* buffer, 
char v) 
const noexcept 
  167    buffer[1] = oscpack::CHAR_TYPE_TAG;
 
  171    boost::endian::endian_store<int32_t, 4, boost::endian::order::big>(
 
  172        (
unsigned char*)buffer + 4, (int32_t)v);
 
  177  std::size_t operator()(
char* buffer, oscpack::RgbaColor v) 
const noexcept 
  180    buffer[1] = oscpack::RGBA_COLOR_TYPE_TAG;
 
  184    boost::endian::endian_store<uint32_t, 4, boost::endian::order::big>(
 
  185        (
unsigned char*)buffer + 4, v.value);
 
  189  std::size_t operator()(
char* buffer, vec4f t) 
const noexcept 
  191    if(unit == ossia::rgba8_u{})
 
  193      return (*
this)(buffer, to_osc_rgba({t}));
 
  197      return osc_common_outbound_static_policy::operator()(buffer, t);
 
  202struct osc_extended_policy
 
  204  using static_policy = osc_extended_outbound_static_policy;
 
  205  using dynamic_policy = osc_extended_outbound_dynamic_policy;
 
std::string extended_type
How a low-level type should be interpreted.
Definition complex_type.hpp:9