27#ifdef JUCE_VSTINTERFACE_H_INCLUDED
43 template <
typename Events>
55 Vst2::VstEvent*
const& getEvent (
int index)
const {
return getEvent (*
events, index); }
56 Vst2::VstEvent* & getEvent (
int index) {
return getEvent (*
events, index); }
88 auto*
const e =
static_cast<Vst2::VstMidiEvent*
> (ptr);
90 if (e->type == Vst2::kVstSysExType)
92 delete[]
reinterpret_cast<Vst2::VstMidiSysexEvent*
> (e)->
sysexDump;
93 e->type = Vst2::kVstMidiType;
94 e->byteSize =
sizeof (Vst2::VstMidiEvent);
98 e->noteOffVelocity = 0;
106 auto*
const se =
static_cast<Vst2::VstMidiSysexEvent*
> (ptr);
108 if (
se->type == Vst2::kVstSysExType)
109 delete[]
se->sysexDump;
111 se->sysexDump =
new char [(
size_t) numBytes];
114 se->type = Vst2::kVstSysExType;
115 se->byteSize =
sizeof (Vst2::VstMidiSysexEvent);
118 se->dumpBytes = numBytes;
129 for (
int i = 0; i <
events->numEvents; ++i)
131 const auto*
const e = getEvent (*
events, i);
135 const void*
const ptr = e;
137 if (e->type == Vst2::kVstMidiType)
139 dest.addEvent ((
const juce::uint8*)
static_cast<const Vst2::VstMidiEvent*
> (ptr)->
midiData,
142 else if (e->type == Vst2::kVstSysExType)
144 const auto*
se =
static_cast<const Vst2::VstMidiSysexEvent*
> (ptr);
195 constexpr auto size =
jmax (
sizeof (Vst2::VstMidiEvent),
sizeof (Vst2::VstMidiSysexEvent));
197 if (
auto* e =
static_cast<Vst2::VstEvent*
> (
std::calloc (1, size)))
199 e->type = Vst2::kVstMidiType;
200 e->byteSize =
sizeof (Vst2::VstMidiEvent);
209 if (e->type == Vst2::kVstSysExType)
211 delete[] (
reinterpret_cast<Vst2::VstMidiSysexEvent*
> (e)->
sysexDump);
constexpr Type jmax(Type a, Type b)
Returns the larger of two values.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
unsigned char uint8
A platform-independent 8-bit unsigned integer type.