Audacity 3.2.0
ParameterValueQueue.cpp
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 @file ParameterValueQueue.cpp
6
7 @author Vitaly Sverchinsky
8
9 @brief Part of Audacity VST3 module
10
11**********************************************************************/
12
13#include "ParameterValueQueue.h"
14
15#include <wx/debug.h>
16
18{
19 return sampleOffset < other.sampleOffset;
20}
21
23{
24 FUNKNOWN_CTOR
25}
26
28{
29 wxASSERT(!mInitialized);
30 FUNKNOWN_DTOR;
31}
32
33void internal::ParameterValueQueue::initialize(Steinberg::Vst::ParamID id)
34{
35 wxASSERT(!mInitialized);//misuse
36
37 mInitialized = true;
38 mId = id;
39}
40
42{
43 return mInitialized;
44}
45
47{
48 mInitialized = false;
49 mPoints.clear();
50}
51
53{
54 wxASSERT(mInitialized);
55 return mId;
56}
57
59{
60 wxASSERT(mInitialized);
61 return static_cast<int>(mPoints.size());
62}
63
64Steinberg::tresult internal::ParameterValueQueue::getPoint(Steinberg::int32 index, Steinberg::int32& sampleOffset,
65 Steinberg::Vst::ParamValue& value)
66{
67 wxASSERT(mInitialized);
68 if(index >= 0 && index < mPoints.size())
69 {
70 sampleOffset = mPoints[index].sampleOffset;
71 value = mPoints[index].paramValue;
72 return Steinberg::kResultOk;
73 }
74 return Steinberg::kInvalidArgument;
75}
76
77Steinberg::tresult internal::ParameterValueQueue::addPoint(Steinberg::int32 sampleOffset,
78 Steinberg::Vst::ParamValue value, Steinberg::int32& index)
79{
80 //store points sorted by time value
81
82 wxASSERT(mInitialized);
83
84 auto newPoint = Point { sampleOffset, value };
85 const auto it =
86 std::lower_bound(mPoints.begin(), mPoints.end(), newPoint);
87
88 if(it == mPoints.end())
89 {
90 index = mPoints.size();
91 mPoints.push_back(std::move(newPoint));
92 }
93 else
94 {
95 if (it->sampleOffset == sampleOffset)
96 it->paramValue = value;
97 else
98 mPoints.insert(it, std::move(newPoint));
99 index = std::distance(mPoints.begin(), it);
100 }
101
102 return Steinberg::kResultOk;
103}
104
105IMPLEMENT_FUNKNOWN_METHODS(internal::ParameterValueQueue, Steinberg::Vst::IParamValueQueue, Steinberg::Vst::IParamValueQueue::iid)
IMPLEMENT_FUNKNOWN_METHODS(internal::ConnectionProxy, Steinberg::Vst::IConnectionPoint, Steinberg::Vst::IConnectionPoint::iid)
int id
Steinberg::int32 PLUGIN_API getPointCount() override
bool isInitialized() const noexcept
Steinberg::tresult PLUGIN_API getPoint(Steinberg::int32 index, Steinberg::int32 &sampleOffset, Steinberg::Vst::ParamValue &value) override
Steinberg::Vst::ParamID PLUGIN_API getParameterId() override
void initialize(Steinberg::Vst::ParamID id)
Steinberg::Vst::ParamID mId
Steinberg::tresult PLUGIN_API addPoint(Steinberg::int32 sampleOffset, Steinberg::Vst::ParamValue value, Steinberg::int32 &index) override
bool operator<(const Point &other) const