mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Add utility functions to access un-aligned memory
This commit is contained in:
parent
0c714770c1
commit
2f2c8436b8
2 changed files with 22 additions and 4 deletions
|
|
@ -26,12 +26,12 @@ namespace MidiBufferHelpers
|
|||
{
|
||||
inline int getEventTime (const void* const d) noexcept
|
||||
{
|
||||
return *static_cast<const int32*> (d);
|
||||
return readUnaligned<int32> (d);
|
||||
}
|
||||
|
||||
inline uint16 getEventDataSize (const void* const d) noexcept
|
||||
{
|
||||
return *reinterpret_cast<const uint16*> (static_cast<const char*> (d) + sizeof (int32));
|
||||
return readUnaligned<uint16> (static_cast<const char*> (d) + sizeof (int32));
|
||||
}
|
||||
|
||||
inline uint16 getEventTotalSize (const void* const d) noexcept
|
||||
|
|
@ -124,8 +124,8 @@ void MidiBuffer::addEvent (const void* const newData, const int maxBytes, const
|
|||
data.insertMultiple (offset, 0, (int) newItemSize);
|
||||
|
||||
uint8* const d = data.begin() + offset;
|
||||
*reinterpret_cast<int32*> (d) = sampleNumber;
|
||||
*reinterpret_cast<uint16*> (d + 4) = (uint16) numBytes;
|
||||
writeUnaligned<int32> (d, sampleNumber);
|
||||
writeUnaligned<uint16> (d + 4, static_cast<uint16> (numBytes));
|
||||
memcpy (d + 6, newData, (size_t) numBytes);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,24 @@ inline int getAddressDifference (Type1* pointer1, Type2* pointer2) noexcept { r
|
|||
template <class Type>
|
||||
inline Type* createCopyIfNotNull (const Type* objectToCopy) { return objectToCopy != nullptr ? new Type (*objectToCopy) : nullptr; }
|
||||
|
||||
//==============================================================================
|
||||
/** A handy function to read un-aligned memory without a performance penalty or bus-error. */
|
||||
template <typename Type>
|
||||
inline Type readUnaligned (const void* srcPtr) noexcept
|
||||
{
|
||||
Type value;
|
||||
memcpy (&value, srcPtr, sizeof (Type));
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/** A handy function to write un-aligned memory without a performance penalty or bus-error. */
|
||||
template <typename Type>
|
||||
inline void writeUnaligned (void* dstPtr, Type value) noexcept
|
||||
{
|
||||
memcpy (dstPtr, &value, sizeof(Type));
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_MAC || JUCE_IOS || DOXYGEN
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue