28 inline void zeromem (
void* memory,
size_t numBytes) noexcept { memset (memory, 0, numBytes); }
31 template <
typename Type>
32 inline void zerostruct (Type& structure) noexcept { memset ((
void*) &structure, 0,
sizeof (structure)); }
39 template <
typename Type>
40 inline void deleteAndZero (Type& pointer) {
delete pointer; pointer =
nullptr; }
46 template <
typename Type,
typename IntegerType>
47 inline Type* addBytesToPointer (Type* basePointer, IntegerType bytes) noexcept {
return reinterpret_cast<Type*
> (
const_cast<char*
> (
reinterpret_cast<const char*
> (basePointer)) + bytes); }
51 template <
typename Type,
typename IntegerType>
52 inline Type* snapPointerToAlignment (Type* basePointer, IntegerType alignmentBytes) noexcept
54 return (Type*) ((((size_t) basePointer) + (alignmentBytes - 1)) & ~(alignmentBytes - 1));
60 template <
typename Type1,
typename Type2>
61 inline int getAddressDifference (Type1* pointer1, Type2* pointer2) noexcept {
return (
int) (((
const char*) pointer1) - (
const char*) pointer2); }
67 inline Type* createCopyIfNotNull (
const Type* objectToCopy) {
return objectToCopy !=
nullptr ?
new Type (*objectToCopy) : nullptr; }
71 template <
typename Type>
72 inline Type readUnaligned (
const void* srcPtr) noexcept
75 memcpy (&value, srcPtr,
sizeof (Type));
80 template <
typename Type>
81 inline void writeUnaligned (
void* dstPtr, Type value) noexcept
83 memcpy (dstPtr, &value,
sizeof (Type));
87 #if JUCE_MAC || JUCE_IOS || DOXYGEN 94 class JUCE_API ScopedAutoReleasePool
97 ScopedAutoReleasePool();
98 ~ScopedAutoReleasePool();
103 JUCE_DECLARE_NON_COPYABLE (ScopedAutoReleasePool)
111 #if (JUCE_COMPILER_SUPPORTS_ARC && defined (__OBJC__)) || DOXYGEN 112 #define JUCE_AUTORELEASEPOOL @autoreleasepool 114 #define JUCE_AUTORELEASEPOOL const juce::ScopedAutoReleasePool JUCE_JOIN_MACRO (autoReleasePool_, __LINE__); 118 #define JUCE_AUTORELEASEPOOL 127 #if JUCE_MSVC && (defined (JUCE_DLL) || defined (JUCE_DLL_BUILD)) && ! (JUCE_DISABLE_DLL_ALLOCATORS || DOXYGEN) 128 extern JUCE_API
void* juceDLL_malloc (
size_t);
129 extern JUCE_API
void juceDLL_free (
void*);
131 #define JUCE_LEAK_DETECTOR(OwnerClass) public:\ 132 static void* operator new (size_t sz) { return juce::juceDLL_malloc (sz); } \ 133 static void* operator new (size_t, void* p) { return p; } \ 134 static void operator delete (void* p) { juce::juceDLL_free (p); } \ 135 static void operator delete (void*, void*) {} 142 #ifndef juce_UseDebuggingNewOperator 143 #define juce_UseDebuggingNewOperator