include/AK/IBytes.h
説明を見る。00001
00002
00003
00004
00006
00009
00010 #ifndef _AK_IBYTES_H
00011 #define _AK_IBYTES_H
00012
00013 #include <wchar.h>
00014 #include <AK/Tools/Common/AkPlatformFuncs.h>
00015
00016 namespace AK
00017 {
00020 class IReadBytes
00021 {
00022 public:
00025
00026
00029 virtual bool ReadBytes(
00030 void * in_pData,
00031 long in_cBytes,
00032 long & out_cRead
00033 ) = 0;
00034
00036
00039
00040
00044 template<class T>
00045 bool Read(
00046 T & out_data )
00047 {
00048 long cRead;
00049 return ReadBytes( &out_data, sizeof( T ), cRead );
00050 }
00051
00056 template<class T>
00057 T Read()
00058 {
00059 T value;
00060
00061 long cRead;
00062 ReadBytes( &value, sizeof( T ), cRead );
00063
00064 return value;
00065 }
00066
00069 bool ReadString(
00070 wchar_t * out_pszString,
00071 long in_nMax )
00072 {
00073 long cChars;
00074 if ( !Read<long>( cChars ) )
00075 return false;
00076
00077 bool bRet = true;
00078
00079 if ( cChars > 0 )
00080 {
00081 long cRead;
00082
00083 if ( cChars < in_nMax )
00084 {
00085 ReadBytes( out_pszString, cChars * sizeof( wchar_t ), cRead );
00086 out_pszString[ cChars ] = 0;
00087
00088 bRet = cRead == (long)( cChars * sizeof( wchar_t ) );
00089 }
00090 else
00091 {
00092 ReadBytes( out_pszString, in_nMax * sizeof( wchar_t ), cRead );
00093 out_pszString[ in_nMax - 1 ] = 0;
00094
00095 bRet = cRead == (long)( cChars * sizeof( wchar_t ) );
00096
00097 if ( bRet )
00098 {
00099
00100 long cRemaining = cChars - in_nMax;
00101
00102 wchar_t * pTemp = new wchar_t[ cRemaining ];
00103
00104 ReadBytes( pTemp, cRemaining * sizeof( wchar_t ), cRead );
00105
00106 bRet = cRemaining == (long)( cChars * sizeof( wchar_t ) );
00107
00108 delete [] pTemp;
00109 }
00110 }
00111 }
00112 else
00113 {
00114 out_pszString[ 0 ] = 0;
00115 }
00116
00117 return bRet;
00118 }
00120 };
00121
00124 class IWriteBytes
00125 {
00126 public:
00129
00130
00133 virtual bool WriteBytes(
00134 const void * in_pData,
00135 AkInt32 in_cBytes,
00136 AkInt32 & out_cWritten
00137 ) = 0;
00138
00140
00143
00144
00148 template<class T>
00149 bool Write(
00150 const T & in_data )
00151 {
00152 AkInt32 cWritten;
00153 return WriteBytes( &in_data, sizeof( T ), cWritten );
00154 }
00155
00158 bool WriteString(
00159 const wchar_t * in_pszString )
00160 {
00161 if ( in_pszString != NULL )
00162 {
00163 size_t cChars = wcslen( in_pszString );
00164 if ( !Write<AkUInt32>( (AkUInt32) cChars ) )
00165 return false;
00166
00167 AkInt32 cWritten = 0;
00168 AkInt32 cToWrite = (AkInt32)( cChars * sizeof( wchar_t ) );
00169
00170 if ( cChars > 0 )
00171 {
00172 WriteBytes( in_pszString, cToWrite, cWritten );
00173 }
00174
00175 return cWritten == cToWrite;
00176 }
00177 return Write<AkUInt32>( 0 );
00178 }
00179
00182 bool WriteString(
00183 const char * in_pszString )
00184 {
00185 if ( in_pszString != NULL )
00186 {
00187 size_t cChars = strlen( in_pszString );
00188 if ( !Write<AkUInt32>( (AkUInt32) cChars ) )
00189 return false;
00190
00191 AkInt32 cWritten = 0;
00192
00193 if ( cChars > 0 )
00194 {
00195 WriteBytes( in_pszString, (AkInt32) cChars, cWritten );
00196 }
00197
00198 return cWritten == (AkInt32) cChars;
00199 }
00200 return Write<AkUInt32>( 0 );
00201 }
00203 };
00204
00207 class IWriteBuffer : public IWriteBytes
00208 {
00209 public:
00212
00213
00216 virtual AkInt32 Count() const = 0;
00217
00220 virtual AkUInt8 * Bytes() const = 0;
00221
00223 virtual void SetCount( AkInt32 in_cBytes ) = 0;
00224
00227 virtual bool Reserve( AkInt32 in_cBytes ) = 0;
00228
00230 virtual void Clear() = 0;
00231
00233 virtual AkUInt8 * Detach() = 0;
00234
00236 };
00237 }
00238
00239 #endif // _AK_IBYTES_H
あなたのプロジェクトについて教えてください。ご不明な点はありませんか。
プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。
Wwiseからはじめよう