diff --git a/include/FluidSCWrapper.hpp b/include/FluidSCWrapper.hpp index 9cad17e..060f901 100644 --- a/include/FluidSCWrapper.hpp +++ b/include/FluidSCWrapper.hpp @@ -176,7 +176,7 @@ public: /// Final input is the doneAction, not a param, so we skip it in the controlsIterator NonRealTime() : - mControlsIterator{mInBuf,static_cast(static_cast(mNumInputs) - mSpecialIndex - 1)} + mControlsIterator{mInBuf,static_cast(mNumInputs == 0 ? 0 : static_cast(mNumInputs) - mSpecialIndex - 1)} , mParams{Wrapper::Client::getParameterDescriptors()} , mClient{Wrapper::setParams(mParams,mWorld->mVerbosity > 0, mWorld, mControlsIterator,true)} {} @@ -381,7 +381,7 @@ class FluidSCWrapperImpl : pub // Make base class(es), full of CRTP mixin goodness template -using FluidSCWrapperBase = FluidSCWrapperImpl, isNonRealTime, isRealTime>; +using FluidSCWrapperBase = FluidSCWrapperImpl, typename Client::isNonRealTime, typename Client::isRealTime>; } // namespace impl @@ -524,14 +524,14 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase static void launchMessage(Unit* u,sc_msg_iter* args) { FluidSCWrapper* x = static_cast(u); - using IndexList = typename Client::MessageSetType::template MessageDescriptorAt::IndexList; + using IndexList = typename Client::MessageSetType::template MessageDescriptorAt::IndexList; launchMessageImpl(x,args,IndexList()); } template static void launchMessageImpl(FluidSCWrapper* x,sc_msg_iter* inArgs,std::index_sequence) { - using MessageDescriptor = typename Client::MessageSetType::template MessageDescriptorAt; + using MessageDescriptor = typename Client::MessageSetType::template MessageDescriptorAt; using ArgTuple = typename MessageDescriptor::ArgumentTypes; using ReturnType = typename MessageDescriptor::ReturnType; using IndexList = typename MessageDescriptor::IndexList; @@ -669,13 +669,10 @@ public: } }; - - - -template class Client> +template void makeSCWrapper(const char *name, InterfaceTable *ft) { - FluidSCWrapper>::setup(ft, name); + FluidSCWrapper::setup(ft, name); } } // namespace client