이 파일의 문서화 페이지로 가기
32 #if (defined(AK_CPU_X86_64) || defined(AK_CPU_X86))
35 #include <mach/task.h>
36 #include <mach/semaphore.h>
37 #include <CoreFoundation/CFString.h>
38 #include <libkern/OSAtomic.h>
39 #include <mach/task.h>
40 #include <mach/mach_init.h>
44 #define AK_SEC_TO_NANOSEC 1000000000ULL
61 kern_return_t ret = semaphore_create(
75 AKVERIFY( semaphore_destroy( mach_task_self(), io_event ) == noErr);
83 AKVERIFY( semaphore_wait( in_event ) == noErr );
90 AKVERIFY( semaphore_signal( in_event ) == noErr );
103 kern_return_t ret = semaphore_create(
115 AKVERIFY(semaphore_destroy(mach_task_self(), io_semaphore) == noErr);
121 AKVERIFY(semaphore_wait(in_semaphore) == noErr);
127 for (
int i=0; i < in_count; i++)
129 AKVERIFY(semaphore_signal(in_semaphore) == noErr);
139 struct timespec clockNow;
140 clock_gettime(CLOCK_MONOTONIC, &clockNow);
153 template<
class destType,
class srcType>
154 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 *) )
156 CFStringBuiltInEncodings dstEncoding;
157 CFStringBuiltInEncodings srcEncoding;
158 switch(
sizeof(destType))
161 dstEncoding = kCFStringEncodingUTF8;
164 dstEncoding = kCFStringEncodingUTF16LE;
167 dstEncoding = kCFStringEncodingUTF32LE;
173 switch(
sizeof(srcType))
176 srcEncoding = kCFStringEncodingUTF8;
179 srcEncoding = kCFStringEncodingUTF16LE;
182 srcEncoding = kCFStringEncodingUTF32LE;
189 strRef = CFStringCreateWithBytes( nil,
191 (srcStrLen( in_pSrc ) + 1) *
sizeof(srcType),
194 CFRange rangeToProcess = CFRangeMake(0, CFStringGetLength(strRef));
195 CFIndex sizeConverted = CFStringGetBytes(strRef, rangeToProcess, dstEncoding,
'?',
false, (UInt8 *)in_pdDest , in_MaxSize *
sizeof(destType),
NULL);
200 return sizeConverted;
203 #define CONVERT_UTF16_TO_WCHAR( _astring_, _wcharstring_ ) \
204 _wcharstring_ = (wchar_t*)AkAlloca( (1 + AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)) * sizeof(wchar_t) ); \
205 AK_UTF16_TO_WCHAR( _wcharstring_, (const AkUtf16*)_astring_, AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)+1 )
207 #define CONVERT_WCHAR_TO_UTF16( _astring_, _utf16string_ ) \
208 _utf16string_ = (AkUtf16*)AkAlloca( (1 + wcslen(_astring_)) * sizeof(AkUtf16) ); \
209 AK_WCHAR_TO_UTF16( _utf16string_, (const wchar_t*)_astring_, wcslen(_astring_)+1 )
211 #define CONVERT_OSCHAR_TO_UTF16( _astring_, _utf16string_ ) \
212 _utf16string_ = (AkUtf16*)AkAlloca( (1 + strlen(_astring_)) * sizeof(AkUtf16) ); \
213 AK_OSCHAR_TO_UTF16( _utf16string_, (const AkOSChar*)_astring_, strlen(_astring_)+1 )
215 #define CONVERT_UTF16_TO_OSCHAR( _astring_, _oscharstring_ ) \
216 _oscharstring_ = (AkOSChar*)AkAlloca( (1 + AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)) * sizeof(AkOSChar) ); \
217 AK_UTF16_TO_OSCHAR( _oscharstring_, (const AkUtf16*)_astring_, AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)+1 )
219 #define AK_UTF8_TO_OSCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkOSChar, char>( in_pdDest, in_pSrc, in_MaxSize, strlen, strlen )
220 #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)
221 #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 )
222 #define AK_UTF16_TO_OSCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkOSChar, AkUtf16>( in_pdDest, in_pSrc, in_MaxSize, strlen, AKPLATFORM::AkUtf16StrLen )
223 #define AK_UTF16_TO_CHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<char, AkUtf16>( in_pdDest, in_pSrc, in_MaxSize, strlen, AKPLATFORM::AkUtf16StrLen )
224 #define AK_CHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkUtf16, char>( in_pdDest, in_pSrc, in_MaxSize, AKPLATFORM::AkUtf16StrLen, strlen)
225 #define AK_OSCHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkMacConvertString<AkUtf16, AkOSChar>( in_pdDest, in_pSrc, in_MaxSize, AKPLATFORM::AkUtf16StrLen, strlen)
228 #define AkAlloca( _size_ ) alloca( _size_ )
230 #if __BIGGEST_ALIGNMENT__ < AK_SIMD_ALIGNMENT
231 #define AkAllocaSIMD( _size_ ) __builtin_alloca_with_align( _size_, AK_SIMD_ALIGNMENT*8 )
234 #define AK_LIBRARY_PREFIX ("")
235 #define AK_DYNAMIC_LIBRARY_EXTENSION (".dylib")
237 #define AK_FILEHANDLE_TO_UINTPTR(_h) ((AkUIntPtr)_h)
238 #define AK_SET_FILEHANDLE_TO_UINTPTR(_h,_u) _h = (AkFileHandle)_u
240 #if (defined(AK_CPU_X86_64) || defined(AK_CPU_X86))
244 inline void CPUID(
AkUInt32 in_uLeafOpcode,
AkUInt32 in_uSubLeafOpcode,
unsigned int out_uCPUFeatures[4])
246 __get_cpuid_count( in_uLeafOpcode, in_uSubLeafOpcode,
247 &out_uCPUFeatures[0],
248 &out_uCPUFeatures[1],
249 &out_uCPUFeatures[2],
250 &out_uCPUFeatures[3]);
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.
void CPUID(AkUInt32 in_uLeafOpcode, AkUInt32 in_uSubLeafOpcode, unsigned int out_uCPUFeatures[4])
@ 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
지원이 필요하신가요?
질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!
지원 페이지를 방문해 주세요
작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요