1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-23 01:44:22 +00:00

MidiMessage: Added VariableLengthValue::isValid() and removed assertion from MidiMessage::readVariableLengthValue()

This commit is contained in:
ed 2021-01-21 10:48:51 +00:00
parent 66311c798f
commit 2fb3637e25
3 changed files with 7 additions and 4 deletions

View file

@ -231,7 +231,7 @@ namespace MidiFileHelpers
{
const auto delay = MidiMessage::readVariableLengthValue (data, (int) size);
if (delay.bytesUsed == 0)
if (! delay.isValid())
break;
data += delay.bytesUsed;

View file

@ -79,7 +79,6 @@ MidiMessage::VariableLengthValue MidiMessage::readVariableLengthValue (const uin
// bytes of input to construct a full value, or no terminating byte was
// found. This implementation only supports variable-length values of up
// to four bytes.
jassertfalse;
return {};
}
@ -1225,6 +1224,7 @@ struct MidiMessageTest : public UnitTest
const auto result = MidiMessage::readVariableLengthValue (copy.data(),
(int) copy.size());
expect (result.isValid());
expectEquals (result.value, outputs[index]);
expectEquals (result.bytesUsed, (int) inputs[index].size());
@ -1252,6 +1252,7 @@ struct MidiMessageTest : public UnitTest
const auto result = MidiMessage::readVariableLengthValue (input.data(),
(int) input.size());
expect (! result.isValid());
expectEquals (result.value, 0);
expectEquals (result.bytesUsed, 0);
}

View file

@ -872,7 +872,6 @@ public:
from a stream of bytes.
A valid value requires that `bytesUsed` is greater than 0.
If `bytesUsed <= 0` this object should be considered invalid.
*/
struct VariableLengthValue
{
@ -881,6 +880,8 @@ public:
VariableLengthValue (int valueIn, int bytesUsedIn)
: value (valueIn), bytesUsed (bytesUsedIn) {}
bool isValid() const noexcept { return bytesUsed > 0; }
int value = 0;
int bytesUsed = 0;
};
@ -891,7 +892,8 @@ public:
@param maxBytesToUse the number of bytes in the region following `data`
@returns a struct containing the parsed value, and the number
of bytes that were read. If parsing fails, both the
`value` and `bytesUsed` fields will be set to 0.
`value` and `bytesUsed` fields will be set to 0 and
`isValid()` will return false
*/
static VariableLengthValue readVariableLengthValue (const uint8* data,
int maxBytesToUse) noexcept;