21#include <pongasoft/logging/logging.h>
25#include <pluginterfaces/vst/vsttypes.h>
26#include <base/source/fstreamer.h>
36using namespace Steinberg;
37using namespace Steinberg::Vst;
80 oValue =
static_cast<T
>(iDiscreteValue);
87 oDiscreteValue =
static_cast<int32
>(iValue);
140 std::ostringstream s;
143 s.precision(iPrecision);
144 s.setf(std::ios::fixed);
157inline tresult
readDouble(IBStreamer &iStreamer,
double &oValue)
160 if(!iStreamer.readDouble(value))
167inline tresult
readFloat(IBStreamer &iStreamer,
float &oValue)
170 if(!iStreamer.readFloat(value))
177template<
typename Int>
180 for(Int i = 0; i < iCount; i++)
182 if(!iStreamer.readFloat(oValue[i]))
190inline tresult
readInt64(IBStreamer &iStreamer, int64 &oValue)
193 if(!iStreamer.readInt64(value))
200inline tresult
readInt64u(IBStreamer &iStreamer, uint64 &oValue)
203 if(!iStreamer.readInt64u(value))
210inline tresult
readInt32(IBStreamer &iStreamer, int32 &oValue)
213 if(!iStreamer.readInt32(value))
220inline tresult
readBool(IBStreamer &iStreamer,
bool &oValue)
223 if(!iStreamer.readBool(value))
244 oStreamer.writeDouble(iValue);
262 oStreamer.writeDouble(iValue);
280 oStreamer.writeInt32(iValue);
298 oStreamer.writeInt64(iValue);
310 std::string iTrueString =
"On") :
322 oStreamer.writeBool(iValue);
336 oValue = iDiscreteValue != 0;
342 oDiscreteValue = iValue ? 1 : 0;
357template<
int size = 128>
366 if(iStreamer.readRaw(
static_cast<void*
>(oValue), size) == size)
368 oValue[size - 1] = 0;
378 if(oStreamer.writeRaw(
static_cast<void const *
>(iValue), size) == size)
387 if(std::find(std::begin(iValue), std::end(iValue), 0) != std::end(iValue))
395 std::copy(std::begin(iValue), std::end(iValue), std::begin(str));
398 DLOG_F(WARNING,
"%s not properly null terminated!", str);
430template<
typename T,
class Compare = std::less<T>>
436 using TMap = std::map<T, std::pair<std::string, int32>, Compare>;
444 using ConstructorType = std::initializer_list<std::pair<const T, std::string>>
const &;
453 auto stepCount =
static_cast<int32
>(iInitList.size() - 1);
454 DCHECK_F(stepCount > 0);
458 for(
auto &pair : iInitList)
460 fMap[pair.first] = std::make_pair(pair.second, i);
461 fList.emplace_back(pair.first);
475 if(iDiscreteValue < 0 || iDiscreteValue >
getStepCount())
477 oValue =
fList[iDiscreteValue];
484 auto iter =
fMap.find(iValue);
485 if(iter !=
fMap.cend())
487 oDiscreteValue = std::get<1>(iter->second);
492 DLOG_F(WARNING,
"could not convertToDiscreteValue...");
514 if(oStreamer.writeInt32(discreteValue))
524 auto iter =
fMap.find(iValue);
525 if(iter !=
fMap.cend())
527 oStream << std::get<0>(iter->second);
void writeToStream(ParamType const &iValue, std::ostream &oStream) const override
Definition ParamSerializers.h:326
int32 getStepCount() const override
Definition ParamSerializers.h:332
std::string fFalseString
Definition ParamSerializers.h:347
tresult writeToStream(const ParamType &iValue, IBStreamer &oStreamer) const override
This method should write iValue to the stream (aka serialization).
Definition ParamSerializers.h:320
tresult convertFromDiscreteValue(int32 iDiscreteValue, bool &oValue) const override
Definition ParamSerializers.h:334
std::string fTrueString
Definition ParamSerializers.h:348
tresult readFromStream(IBStreamer &iStreamer, ParamType &oValue) const override
This method should read from the stream and populate oValue accordingly (aka deserialization).
Definition ParamSerializers.h:315
BooleanParamSerializer(std::string iFalseString="Off", std::string iTrueString="On")
Definition ParamSerializers.h:309
tresult convertToDiscreteValue(const bool &iValue, int32 &oDiscreteValue) const override
Definition ParamSerializers.h:340
A parameter backed by a C type string (char[size]).
Definition ParamSerializers.h:359
void writeToStream(ParamType const &iValue, std::ostream &oStream) const override
Definition ParamSerializers.h:385
char[size] ParamType
Definition ParamSerializers.h:361
tresult writeToStream(const ParamType &iValue, IBStreamer &oStreamer) const override
Definition ParamSerializers.h:376
tresult readFromStream(IBStreamer &iStreamer, ParamType &oValue) const override
Definition ParamSerializers.h:364
void writeToStream(ParamType const &iValue, std::ostream &oStream) const override
By default, this implementation simply writes the value to the stream IF it is possible (determined a...
Definition ParamSerializers.h:522
int32 getStepCount() const override
Definition ParamSerializers.h:470
tresult convertToDiscreteValue(ParamType const &iValue, int32 &oDiscreteValue) const override
Definition ParamSerializers.h:482
tresult convertFromDiscreteValue(int32 iDiscreteValue, ParamType &oValue) const override
Definition ParamSerializers.h:473
std::map< T, std::pair< std::string, int32 >, Compare > TMap
Maintains the map of possible values of T (defined in constructor).
Definition ParamSerializers.h:436
tresult writeToStream(const ParamType &iValue, IBStreamer &oStreamer) const override
This method should write iValue to the stream (aka serialization).
Definition ParamSerializers.h:509
std::initializer_list< std::pair< const T, std::string > > const & ConstructorType
Defines the type for the constructor argument.
Definition ParamSerializers.h:444
std::vector< T > TList
Defines the mapping: discrete value [0, stepCount] to T.
Definition ParamSerializers.h:440
T ParamType
Definition ParamSerializers.h:446
TMap fMap
Definition ParamSerializers.h:532
tresult readFromStream(IBStreamer &iStreamer, ParamType &oValue) const override
This method should read from the stream and populate oValue accordingly (aka deserialization).
Definition ParamSerializers.h:498
DiscreteTypeParamSerializer(ConstructorType iInitList)
Definition ParamSerializers.h:449
TList fList
Definition ParamSerializers.h:533
This parameter handles serializing a double parameter.
Definition ParamSerializers.h:253
tresult writeToStream(const ParamType &iValue, IBStreamer &oStreamer) const override
This method should write iValue to the stream (aka serialization).
Definition ParamSerializers.h:260
tresult readFromStream(IBStreamer &iStreamer, ParamType &oValue) const override
This method should read from the stream and populate oValue accordingly (aka deserialization).
Definition ParamSerializers.h:255
Interface that defines a converter from a type T to an int32 given a number of steps (provided by get...
Definition ParamSerializers.h:47
virtual tresult convertToDiscreteValue(T const &iValue, int32 &oDiscreteValue) const =0
virtual tresult convertFromDiscreteValue(int32 iDiscreteValue, T &oValue) const =0
virtual int32 getStepCount() const =0
A vst parameter is represented by a ParamValue type which is a double in the range [0,...
Definition ParamSerializers.h:109
virtual std::string toString(ParamType const &iValue, int32 iPrecision) const
Definition ParamSerializers.h:138
virtual tresult readFromStream(IBStreamer &iStreamer, ParamType &oValue) const
This method should read from the stream and populate oValue accordingly (aka deserialization).
Definition ParamSerializers.h:117
virtual tresult writeToStream(const ParamType &iValue, IBStreamer &oStreamer) const
This method should write iValue to the stream (aka serialization).
Definition ParamSerializers.h:123
virtual void writeToStream(ParamType const &iValue, std::ostream &oStream) const
By default, this implementation simply writes the value to the stream IF it is possible (determined a...
Definition ParamSerializers.h:130
T ParamType
Definition ParamSerializers.h:111
This parameter handles serializing a int32 parameter.
Definition ParamSerializers.h:271
tresult writeToStream(const ParamType &iValue, IBStreamer &oStreamer) const override
This method should write iValue to the stream (aka serialization).
Definition ParamSerializers.h:278
tresult readFromStream(IBStreamer &iStreamer, ParamType &oValue) const override
This method should read from the stream and populate oValue accordingly (aka deserialization).
Definition ParamSerializers.h:273
This parameter handles serializing a int64 parameter.
Definition ParamSerializers.h:289
tresult writeToStream(const ParamType &iValue, IBStreamer &oStreamer) const override
This method should write iValue to the stream (aka serialization).
Definition ParamSerializers.h:296
tresult readFromStream(IBStreamer &iStreamer, ParamType &oValue) const override
This method should read from the stream and populate oValue accordingly (aka deserialization).
Definition ParamSerializers.h:291
This parameter handles serializing a raw parameter (ParamValue).
Definition ParamSerializers.h:235
tresult writeToStream(const ParamType &iValue, IBStreamer &oStreamer) const override
This method should write iValue to the stream (aka serialization).
Definition ParamSerializers.h:242
tresult readFromStream(IBStreamer &iStreamer, ParamType &oValue) const override
This method should read from the stream and populate oValue accordingly (aka deserialization).
Definition ParamSerializers.h:237
int32 getStepCount() const override
Definition ParamSerializers.h:74
tresult convertToDiscreteValue(T const &iValue, int32 &oDiscreteValue) const override
Definition ParamSerializers.h:85
int32 fStepCount
Definition ParamSerializers.h:93
tresult convertFromDiscreteValue(int32 iDiscreteValue, T &oValue) const override
Definition ParamSerializers.h:77
StaticCastDiscreteConverter(int32 iStepCount)
Definition ParamSerializers.h:68
static T clamp(const U &iValue, const T &iLower, const T &iUpper)
Make sure that the value remains within its bounds.
Definition Misc.h:34
constexpr auto ZERO_INT32
Definition Constants.h:25
constexpr auto is_operator_write_to_ostream_defined
Allows to detect whether a type defines ostream << x at compile time.
Definition Metaprogramming.h:115
IBStreamHelper - Helper functions.
Definition ParamSerializers.h:154
tresult readDouble(IBStreamer &iStreamer, double &oValue)
Definition ParamSerializers.h:157
tresult readFloat(IBStreamer &iStreamer, float &oValue)
Definition ParamSerializers.h:167
tresult readBool(IBStreamer &iStreamer, bool &oValue)
Definition ParamSerializers.h:220
tresult readInt64u(IBStreamer &iStreamer, uint64 &oValue)
Definition ParamSerializers.h:200
tresult readInt32(IBStreamer &iStreamer, int32 &oValue)
Definition ParamSerializers.h:210
tresult readInt64(IBStreamer &iStreamer, int64 &oValue)
Definition ParamSerializers.h:190
tresult readFloatArray(IBStreamer &iStreamer, float *oValue, Int iCount)
Definition ParamSerializers.h:178