Go to the documentation of this file.
32 #include <mach/task.h>
33 #include <mach/semaphore.h>
34 #include <CoreFoundation/CFString.h>
35 #include <libkern/OSAtomic.h>
36 #include <mach/task.h>
37 #include <mach/mach_init.h>
41 #define AK_SEC_TO_NANOSEC 1000000000ULL
58 kern_return_t ret = semaphore_create(
72 AKVERIFY( semaphore_destroy( mach_task_self(), io_event ) == noErr);
80 AKVERIFY( semaphore_wait( in_event ) == noErr );
87 AKVERIFY( semaphore_signal( in_event ) == noErr );
100 kern_return_t ret = semaphore_create(
112 AKVERIFY(semaphore_destroy(mach_task_self(), io_semaphore) == noErr);
118 AKVERIFY(semaphore_wait(in_semaphore) == noErr);
124 for (
int i=0; i < in_count; i++)
126 AKVERIFY(semaphore_signal(in_semaphore) == noErr);
136 struct timespec clockNow;
137 clock_gettime(CLOCK_MONOTONIC, &clockNow);
150 template<
class destType,
class srcType>
151 inline size_t AkMacConvertString( destType* in_pdDest,
const srcType* in_pSrc,
size_t in_MaxSize,
size_t destStrLen(
const destType *),
size_t srcStrLen(
const srcType *) )
153 CFStringBuiltInEncodings dstEncoding;
154 CFStringBuiltInEncodings srcEncoding;
155 switch(
sizeof(destType))
158 dstEncoding = kCFStringEncodingUTF8;
161 dstEncoding = kCFStringEncodingUTF16LE;
164 dstEncoding = kCFStringEncodingUTF32LE;
170 switch(
sizeof(srcType))
173 srcEncoding = kCFStringEncodingUTF8;
176 srcEncoding = kCFStringEncodingUTF16LE;
179 srcEncoding = kCFStringEncodingUTF32LE;
186 strRef = CFStringCreateWithBytes( nil,
188 (srcStrLen( in_pSrc ) + 1) *
sizeof(srcType),
191 CFRange rangeToProcess = CFRangeMake(0, CFStringGetLength(strRef));
192 CFIndex sizeConverted = CFStringGetBytes(strRef, rangeToProcess, dstEncoding,
'?',
false, (UInt8 *)in_pdDest , in_MaxSize *
sizeof(destType),
NULL);
197 return sizeConverted;
200 #define CONVERT_UTF16_TO_WCHAR( _astring_, _wcharstring_ ) \
201 _wcharstring_ = (wchar_t*)AkAlloca( (1 + AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)) * sizeof(wchar_t) ); \
202 AK_UTF16_TO_WCHAR( _wcharstring_, (const AkUtf16*)_astring_, AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)+1 )
204 #define CONVERT_WCHAR_TO_UTF16( _astring_, _utf16string_ ) \
205 _utf16string_ = (AkUtf16*)AkAlloca( (1 + wcslen(_astring_)) * sizeof(AkUtf16) ); \
206 AK_WCHAR_TO_UTF16( _utf16string_, (const wchar_t*)_astring_, wcslen(_astring_)+1 )
208 #define CONVERT_OSCHAR_TO_UTF16( _astring_, _utf16string_ ) \
209 _utf16string_ = (AkUtf16*)AkAlloca( (1 + strlen(_astring_)) * sizeof(AkUtf16) ); \
210 AK_OSCHAR_TO_UTF16( _utf16string_, (const AkOSChar*)_astring_, strlen(_astring_)+1 )
212 #define CONVERT_UTF16_TO_OSCHAR( _astring_, _oscharstring_ ) \
213 _oscharstring_ = (AkOSChar*)AkAlloca( (1 + AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)) * sizeof(AkOSChar) ); \
214 AK_UTF16_TO_OSCHAR( _oscharstring_, (const AkUtf16*)_astring_, AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)+1 )
216 #define AK_UTF8_TO_OSCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkOSChar, char>( in_pdDest, in_pSrc, in_MaxSize, strlen, strlen )
217 #define AK_UTF16_TO_WCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<wchar_t, AkUtf16>( in_pdDest, in_pSrc, in_MaxSize, &wcslen , &AKPLATFORM::AkUtf16StrLen)
218 #define AK_WCHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkUtf16, wchar_t>( in_pdDest, in_pSrc, in_MaxSize, &AKPLATFORM::AkUtf16StrLen, &wcslen )
219 #define AK_UTF16_TO_OSCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkOSChar, AkUtf16>( in_pdDest, in_pSrc, in_MaxSize, strlen, AKPLATFORM::AkUtf16StrLen )
220 #define AK_UTF16_TO_CHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<char, AkUtf16>( in_pdDest, in_pSrc, in_MaxSize, strlen, AKPLATFORM::AkUtf16StrLen )
221 #define AK_CHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkUtf16, char>( in_pdDest, in_pSrc, in_MaxSize, AKPLATFORM::AkUtf16StrLen, strlen)
222 #define AK_OSCHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkUtf16, AkOSChar>( in_pdDest, in_pSrc, in_MaxSize, AKPLATFORM::AkUtf16StrLen, strlen)
225 #define AkAlloca( _size_ ) alloca( _size_ )
227 #if __BIGGEST_ALIGNMENT__ < AK_SIMD_ALIGNMENT
228 #define AkAllocaSIMD( _size_ ) __builtin_alloca_with_align( _size_, AK_SIMD_ALIGNMENT*8 )
231 #define AK_LIBRARY_PREFIX ("")
232 #define AK_DYNAMIC_LIBRARY_EXTENSION (".dylib")
234 #define AK_FILEHANDLE_TO_UINTPTR(_h) ((AkUIntPtr)_h)
235 #define AK_SET_FILEHANDLE_TO_UINTPTR(_h,_u) _h = (AkFileHandle)_u
AKRESULT AkCreateSemaphore(AkSemaphore &out_semaphore, AkUInt32 in_initialCount)
Platform Independent Helper.
size_t AkUtf16StrLen(const AkUtf16 *in_pStr)
@ AK_Fail
The operation failed.
void AkClearEvent(AkEvent &out_event)
Platform Independent Helper.
AkForceInline void AkClearSemaphore(AkSemaphore &io_semaphore)
Platform Independent Helper.
Platform-dependent helpers.
void AkWaitForEvent(AkEvent &in_event)
Platform Independent Helper.
AKRESULT
Standard function call result.
@ AK_Success
The operation was successful.
void PerformanceCounter(AkInt64 *out_piLastTime)
Platform Independent Helper.
size_t AkMacConvertString(destType *in_pdDest, const srcType *in_pSrc, size_t in_MaxSize, size_t destStrLen(const destType *), size_t srcStrLen(const srcType *))
void AkDestroySemaphore(AkSemaphore &io_semaphore)
Platform Independent Helper.
void AkDestroyEvent(AkEvent &io_event)
Platform Independent Helper.
#define AKASSERT(Condition)
AKRESULT AkCreateEvent(AkEvent &out_event)
Platform Independent Helper.
int64_t AkInt64
Signed 64-bit integer.
void AkWaitForSemaphore(AkSemaphore &in_semaphore)
Platform Independent Helper - Semaphore wait, aka Operation P. Decrements value of semaphore,...
void PerformanceFrequency(AkInt64 *out_piFreq)
Platform Independent Helper.
uint32_t AkUInt32
Unsigned 32-bit integer.
void AkReleaseSemaphore(AkSemaphore &in_semaphore, AkUInt32 in_count)
Platform Independent Helper - Semaphore signal, aka Operation V. Increments value of semaphore by an ...
void AkSignalEvent(const AkEvent &in_event)
Platform Independent Helper.
Tell us about your project. We're here to help.
Register your project and we'll help you get started with no strings attached!
Get started with Wwise