diff --git a/include/FluidSCWrapper.hpp b/include/FluidSCWrapper.hpp index 016d96b..c1d074e 100644 --- a/include/FluidSCWrapper.hpp +++ b/include/FluidSCWrapper.hpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -321,8 +322,11 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase // Iterate over arguments in sc_msg_iter, via callbacks from params object template - struct GetArgument + struct Setter { + static constexpr size_t argSize = C::getParameterDescriptors().template get().fixedSize; + using ArrayType = std::array, argSize>; + auto fromArgs(World *w, FloatControlsIter& args, LongT::type) { return args.next(); } auto fromArgs(World *w, FloatControlsIter& args, FloatT::type) { return args.next(); } auto fromArgs(World *w, sc_msg_iter* args, LongT::type) { return args->geti(); } @@ -338,29 +342,27 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase } template - static typename T::type makeVal(std::vector> &v, std::index_sequence) + static typename T::type makeVal(ArrayType &a, std::index_sequence) { - return typename T::type{v[Is]...}; + return typename T::type{a[Is]...}; } typename T::type operator()(World *w, ArgType args) { - constexpr size_t argSize = Client::getParameterDescriptors().template get().fixedSize; - - std::vector> v; + ArrayType a; for (auto i = 0; i < argSize; i++) - v.push_back(fromArgs(w, args, ParamLiteralType())); + a[i] = fromArgs(w, args, a[0]); - return makeVal(v, std::make_index_sequence()); + return makeVal(a, std::make_index_sequence()); } }; template - using ArgumentGetter = GetArgument; + using ArgumentSetter = Setter; template - using ControlGetter = GetArgument; + using ControlSetter = Setter; public: using Client = C; @@ -399,13 +401,13 @@ public: { //We won't even try and set params if the arguments don't match if(inputs.size() == C::getParameterDescriptors().count()) - p.template setParameterValues(verbose, world, inputs); + p.template setParameterValues(verbose, world, inputs); return p; } static auto& setParams(ParameterSetType& p, bool verbose, World* world, sc_msg_iter *args) { - p.template setParameterValues(verbose,world, args); + p.template setParameterValues(verbose,world, args); return p; } };