28 #ifndef _AK_BANKREADHELPERS_H_
29 #define _AK_BANKREADHELPERS_H_
32 template<
typename T >
41 #if defined(AK_IOS) || defined(AK_ANDROID) || defined(AK_LINUX) || defined(__EMSCRIPTEN__) || defined (AK_NX)
42 typedef struct {T t;} __attribute__((__packed__)) packedStruct;
43 l_Value = ((packedStruct *)in_rptr)->t;
45 l_Value = *( ( T* )in_rptr );
48 in_rptr +=
sizeof( T );
50 in_rSize -=
sizeof( T );
55 template<
typename T >
70 l_Value = (currentByte & 0x7F);
71 while (0x80 & currentByte)
73 currentByte = *in_rptr;
78 l_Value = l_Value << 7;
79 l_Value |= (currentByte & 0x7F);
92 out_uStringSize = ReadBankData<AkUInt32>( in_rptr
99 if ( out_uStringSize > 0 )
101 pString = reinterpret_cast<char*>( in_rptr );
102 in_rptr += out_uStringSize;
104 in_rSize -= out_uStringSize;
111 template<
typename T >
117 AkUInt8* ptr = const_cast<AkUInt8*>(in_rptr) + in_bytesToSkip;
118 return ReadBankData<T>(ptr
125 #ifdef __EMSCRIPTEN__
133 char* pSource = (
char*)ptr;
134 char* pDest = (
char*)&LocalValue;
135 for(
int i = 0; i < 8; ++i)
137 pDest[i] = pSource[i];
146 inline AkReal64 ReadBankData<AkReal64>(
162 #if (defined(AK_IOS) && defined(_DEBUG)) // bug with iOS SDK 4.3 in Debug only
165 template <
typename TO,
typename FROM >
166 inline TO union_cast( FROM value )
168 union { FROM from; TO to; } convert;
169 convert.from = value;
176 AkUInt32 *puint = reinterpret_cast<AkUInt32 *>( ptr );
178 return union_cast<AkReal32>( uint );
183 inline AkReal32 ReadBankData<AkReal32>(
201 AkUInt64 *puint = reinterpret_cast<AkUInt64 *>( ptr );
203 return union_cast<AkReal64>( uint );
208 inline AkReal64 ReadBankData<AkReal64>(
227 #define READBANKDATA( _Type, _Ptr, _Size ) \
228 ReadBankData<_Type>( _Ptr, _Size )
230 #define READVARIABLESIZEBANKDATA( _Type, _Ptr, _Size ) \
231 ReadVariableSizeBankData<_Type>( _Ptr, _Size )
234 #define READBANKSTRING_UTF8( _Ptr, _Size, _out_StringSize ) \
235 ReadBankStringUtf8( _Ptr, _Size, _out_StringSize )
238 #define READBANKSTRING( _Ptr, _Size, _out_StringSize ) \
239 ReadBankStringUtf8( _Ptr, _Size, _out_StringSize ) //same as UTF-8 for now.
242 #define SKIPBANKDATA( _Type, _Ptr, _Size ) \
243 ( _Ptr ) += sizeof( _Type ); \
244 ( _Size ) -= sizeof( _Type )
247 #define SKIPBANKBYTES( _NumBytes, _Ptr, _Size ) \
248 ( _Ptr ) += _NumBytes; \
249 ( _Size ) -= _NumBytes
254 #define READBANKDATA( _Type, _Ptr, _Size ) \
255 ReadBankData<_Type>( _Ptr )
257 #define READVARIABLESIZEBANKDATA( _Type, _Ptr, _Size ) \
258 ReadVariableSizeBankData<_Type>( _Ptr )
260 #define READBANKSTRING_UTF8( _Ptr, _Size, _out_StringSize ) \
261 ReadBankStringUtf8( _Ptr, _out_StringSize )
263 #define READBANKSTRING( _Ptr, _Size, _out_StringSize ) \
264 ReadBankStringUtf8( _Ptr, _out_StringSize )
267 #define SKIPBANKDATA( _Type, _Ptr, _Size ) \
268 ( _Ptr ) += sizeof( _Type )
271 #define SKIPBANKBYTES( _NumBytes, _Ptr, _Size ) \
272 ( _Ptr ) += _NumBytes;
276 #define GETBANKDATABIT( _Data, _Shift ) \
277 (((_Data) >> (_Shift)) & 0x1)
281 #define CHECKBANKDATASIZE( _DATASIZE_, _ERESULT_ ) AKASSERT( _DATASIZE_ == 0 || _ERESULT_ != AK_Success );
283 #define CHECKBANKDATASIZE(_DATASIZE_, _ERESULT_ )
286 #endif //_AK_BANKREADHELPERS_H_
T ReadVariableSizeBankData(AkUInt8 *&in_rptr)
char * ReadBankStringUtf8(AkUInt8 *&in_rptr, AkUInt32 &out_uStringSize)
T ReadUnaligned(const AkUInt8 *in_rptr, AkUInt32 in_bytesToSkip=0)
Read unaligned memory, const version.
T ReadBankData(AkUInt8 *&in_rptr)
Read data from bank and advance pointer.