#include "dkcOSIndependent.h"
#include "dkcDefined.h"
#include <assert.h>
#include <math.h>
dkcOSIndependent.cのインクルード依存関係図
関数 | |
int WINAPI | dkcIsNativePathString (const char *s, size_t size) |
FALSEならNativeなファイルパスではない。. | |
int WINAPI | dkcErrorMessage (const char *expression, const char *filename, size_t line, const char *message,...) |
void * | dkcAllocate (size_t size) |
int | dkcFree (void **p) |
BOOL | dkcIs_foepn_mode (const char *s) |
fopenの時の第二引数が有効な値かどうか調べる。 | |
size_t | dkcReallocateSizeFunction (size_t OldSize, size_t ExpandSize) |
int WINAPI | dkcReallocate (void **NewPtr, size_t NewSize, void **OldPtr) |
int WINAPI | dkcReallocateEx (DKC_REALLOC_F_TYPE your_realloc, void **NewPtr, size_t NewSize, void **OldPtr) |
edk_SUCCEEDEDだったら成功 | |
int WINAPI | dkcReallocateAutoExpand (DKC_REALLOC_F_TYPE your_realloc, void **NewPtr, void **OldPtr, size_t OldSize, size_t *reallocated_size) |
int WINAPI | dkcLoadFile (void *data, size_t size, const char *fname, const char *mode, size_t *readsize) |
int WINAPI | dkcSaveFile (const void *data, size_t size, const char *fname, const char *mode) |
DKC_EXTERN FILE *WINAPI | dkcFOpen (const char *filename, const char *mode) |
fopenのラッパー | |
DKC_EXTERN int WINAPI | dkcFClose (FILE **ptr) |
fcloseのラッパー | |
DKC_EXTERN size_t WINAPI | dkcFReadAll (void *buffer, size_t size, FILE *fp) |
freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror) | |
DKC_EXTERN size_t WINAPI | dkcFWriteAll (void *buffer, size_t size, FILE *fp) |
dkcFReadAll() dkcFReadAllのfwrite版 | |
int WINAPI | dkcSaveBinary (const void *data, size_t size, const char *fname) |
fopenのファイル関数を使ってバイナリセーブを行う。 | |
BOOL WINAPI | dkcCreateEmptyFile (const char *filename) |
空ファイルを作る。 | |
int WINAPI | dkcLoadBinary (void *data, size_t size, const char *fname, size_t *readsize) |
バイナリデータをメモリに読み込む。dkcSaveBinary()と対 | |
int WINAPI | dkcSaveText (const char *text, size_t length, const char *fname) |
fopenでテキストセーブを行う | |
int WINAPI | dkcLoadText (char *text, size_t length, const char *fname, size_t *readsize) |
テキストデータをメモリに読み込む。dkcSaveText()と対 | |
void WINAPI | dkcSwapFast (void *p1, void *p2, size_t size) |
void WINAPI | dkcSwap64 (ULONGLONG *p1, ULONGLONG *p2, size_t size) |
void WINAPI | dkcSwap (void *p1, void *p2, size_t size) |
void WINAPI | dkcTwoDWORDToULONGLONG (ULONGLONG *dest, DWORD high, DWORD low) |
void WINAPI | dkcULONGLONGToTwoDWORD (DWORD *dhigh, DWORD *dlow, ULONGLONG src) |
void WINAPI | dkcCheckMemoryLeak (BOOL flag) |
const char *WINAPI | dkcGetPathSep () |
path separatorの入った文字列(1byte毎にpath separatorの文字定数が入っている)をゲット | |
BOOL WINAPI | dkcIsMMX (void) |
MMXが使えるならTRUE. | |
DKC_INLINE USHORT | dkcReverseEndian16 (USHORT x) |
endian change 16 bit version | |
DKC_INLINE DWORD | dkcReverseEndian32 (DWORD x) |
DKC_INLINE ULONGLONG | dkcReverseEndian64 (ULONGLONG x) |
General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より. | |
DKC_INLINE BOOL | dkcIsLittleEndian () |
little endian ならTRUE | |
void * | get_offset (void *p, size_t offset) |
int WINAPI | dkcSelect (void *dest, const void *a_src, size_t n, int k, size_t width,DKC_COMPARE_TYPE less) |
いわいるセレクト(選択)アルゴリズム | |
DKC_INLINE int WINAPI | dkcSelectMax (void *a, const void *a_src, size_t n, size_t width,DKC_COMPARE_TYPE less) |
DKC_INLINE int WINAPI | dkcSelectMin (void *a, const void *a_src, size_t n, size_t width,DKC_COMPARE_TYPE less) |
dkcOSIndependent.c で定義されています。
|
|
dkcOSIndependent.c の 524 行で定義されています。 参照先 BOOL.
00524 { 00525 00526 } |
|
空ファイルを作る。
dkcOSIndependent.c の 381 行で定義されています。 参照先 BOOL, FALSE, NULL, と TRUE. 参照元 dkcFileCopyEx().
|
|
dkcOSIndependent.c の 28 行で定義されています。 参照先 edk_FAILED, MB, NULL, NULL_CHAR_ARRAY, ODS, SET_VA_LIST_C, と TRUE.
00030 { 00031 char s[1024]; 00032 char ss[1024 * 2]; 00033 00034 int va_list_result; 00035 va_list Valist; 00036 00037 NULL_CHAR_ARRAY(s); 00038 NULL_CHAR_ARRAY(ss); 00039 00040 if(message){ 00041 SET_VA_LIST_C(Valist,va_list_result,s,sizeof(s),message); 00042 }else{ 00043 //SET_VA_LIST(s,sizeof(s),"No message"); 00044 _snprintf(s,sizeof(s),"No message\n"); 00045 } 00046 00047 _snprintf(ss,sizeof(ss), 00048 "DKUTIL_ASSERT(%s):\nfile:%s / \n line:%d / \n message: %s", 00049 expression,filename,line,s); 00050 00051 00052 00053 #ifdef NDEBUG//release 00054 # ifdef WIN32 00055 ODS(ss); 00056 //::MessageBox(NULL,ss,"ERROR ASSERTION !!",MB_OK); 00057 { 00058 LPCTSTR name="ERROR_TEMP.txt"; 00059 { 00060 //ファイルをオープン 00061 FILE *fp; 00062 if(NULL != (fp = fopen( name , "at" ))){ 00063 00064 // エラーログファイルに書き出す 00065 fputs( ss , fp ) ; 00066 fclose( fp ) ; 00067 } 00068 } 00069 ShellExecute(NULL, "open",name, NULL, NULL, SW_SHOWNORMAL); 00070 DeleteFile(name); 00071 } 00072 MB("このテキストをこのソフトの開発者に渡せば、バグ発見の近道なります。\n \ 00073 開発者に知らせるときはこのテキストを転記してあげましょう。"); 00074 if(IDYES==MessageBox(NULL, 00075 "このままこのソフトを起動しつづけると、更なるエラーが発生する可能性があります。\n終了しますか?", 00076 "あってはいけない エラー!!!", 00077 MB_YESNO)) 00078 { 00079 exit(edk_FAILED); 00080 //terminate(); 00081 }else{ 00082 } 00083 # else //else of win32 00084 00085 fprintf(stderr,ss); 00086 exit(edk_FAILED); 00087 00088 # endif //end of win32 00089 00090 #else //debug 00091 00092 # ifdef WIN32 00093 ODS(ss); 00094 fprintf(stderr,ss); 00095 //_CrtDebugBreak(); 00096 DebugBreak(); 00097 # else //else of win32 00098 00099 fprintf(stderr,ss); 00100 Debugger(); 00101 00102 # endif //end of win32 00103 #endif//end of NDEBUG 00104 //assert(ss); 00105 00106 return TRUE; 00107 } |
|
fcloseのラッパー
dkcOSIndependent.c の 281 行で定義されています。 参照先 DKC_EXTERN, edk_ArgumentException, edk_SUCCEEDED, と NULL. 参照元 dkcDeleteCircularStream(), dkcFileCopyEx(), dkcFreeStream(), と GetHeader().
00281 { 00282 if(NULL==ptr || NULL==*ptr) return edk_ArgumentException; 00283 fclose(*ptr); 00284 *ptr = NULL; 00285 return edk_SUCCEEDED; 00286 } |
|
fopenのラッパー
dkcOSIndependent.c の 277 行で定義されています。 参照先 DKC_EXTERN. 参照元 dkcAllocStream(), dkcFileCopyEx(), dkcNewCircularStreamForFile(), と GetHeader().
00277 {
00278 return fopen(filename,mode);
00279 }
|
|
freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror)
dkcOSIndependent.c の 287 行で定義されています。 参照先 BYTE, DKC_EXTERN, と dkcmNOT_ASSERT. 参照元 GetHeader().
00288 { 00289 size_t count; 00290 size_t tc,tsize; 00291 BYTE *tbuffer; 00292 00293 //read size 00294 tsize = size; 00295 //temp variable 00296 tc = 0; 00297 //offset counter 00298 count = 0; 00299 //byte type pointer 00300 tbuffer = (BYTE *)buffer; 00301 for(;;) 00302 { 00303 //error check 00304 if(ferror(fp) ){ 00305 break; 00306 } 00307 if(feof(fp)){ 00308 break; 00309 } 00310 //read 00311 tc = fread(&tbuffer[count],1,tsize,fp); 00312 //update 00313 tsize -= tc; 00314 count += tc; 00315 00316 if(count == size){ 00317 break; 00318 } 00319 # ifdef DEBUG 00320 //ありえないエラーチェック 00321 dkcmNOT_ASSERT(count > size); 00322 # else 00323 if(count > size){ 00324 break; 00325 } 00326 # endif 00327 } 00328 return count; 00329 } |
|
|
dkcFReadAll() dkcFReadAllのfwrite版
dkcOSIndependent.c の 331 行で定義されています。 参照先 BYTE, DKC_EXTERN, と dkcmNOT_ASSERT.
00331 { 00332 size_t count; 00333 size_t tc,tsize; 00334 BYTE *tbuffer; 00335 00336 //read size 00337 tsize = size; 00338 //temp variable 00339 tc = 0; 00340 //offset counter 00341 count = 0; 00342 //byte type pointer 00343 tbuffer = (BYTE *)buffer; 00344 for(;;) 00345 { 00346 //error check 00347 if(ferror(fp) ){ 00348 break; 00349 } 00350 if(feof(fp)){ 00351 break; 00352 } 00353 //read 00354 tc = fwrite(&tbuffer[count],1,tsize,fp); 00355 //update 00356 tsize -= tc; 00357 count += tc; 00358 00359 if(count == size){ 00360 break; 00361 } 00362 # ifdef DEBUG 00363 //ありえないエラーチェック 00364 dkcmNOT_ASSERT(count > size); 00365 # else 00366 if(count > size){ 00367 break; 00368 } 00369 # endif 00370 } 00371 return count; 00372 00373 } |
|
path separatorの入った文字列(1byte毎にpath separatorの文字定数が入っている)をゲット
dkcOSIndependent.c の 529 行で定義されています。 参照先 dkcdPATH_SEP. 参照元 dkcSJIS_SearchPathSep(), と dkcSJIS_SearchPathSepLast().
00529 { 00530 #ifdef WIN32 00531 static char target[3]={dkcdPATH_SEP,'/','\0'}; 00532 #else 00533 static char target[3]={dkcdPATH_SEP,'\0'}; 00534 #endif 00535 return target; 00536 } |
|
fopenの時の第二引数が有効な値かどうか調べる。
dkcOSIndependent.c の 121 行で定義されています。
00121 { 00122 /* wrtb+ */ 00123 const char *ms= "wrtb+"; 00124 size_t slen = strlen(s); 00125 size_t mslen = strlen(ms); 00126 size_t i,j; 00127 int flag = FALSE; 00128 for(i=0;i<slen;i++){ 00129 for(j=0;j<mslen;j++){ 00130 if(ms[j]==s[i]){ 00131 flag = TRUE; 00132 break; 00133 } 00134 } 00135 if(TRUE!=flag){ 00136 return FALSE; 00137 }else{ 00138 flag = FALSE; 00139 } 00140 } 00141 return TRUE; 00142 } |
|
little endian ならTRUE
dkcOSIndependent.c の 593 行で定義されています。 参照先 BOOL, と DKC_INLINE. 参照元 dkcOpenFileWithSignature(), GetHeader(), HeaderWrite(), と SetStreamInfo().
00593 { 00594 int x=1; 00595 return (BOOL)((*(char*)&x)); 00596 } |
|
MMXが使えるならTRUE.
dkcOSIndependent.c の 570 行で定義されています。 参照元 CheckMMX().
00570 { 00571 return FALSE; 00572 } |
|
FALSEならNativeなファイルパスではない。.
dkcOSIndependent.c の 14 行で定義されています。 参照先 dkcmIS_INVALID_PATH_CHAR, edk_FAILED, FALSE, NULL, と TRUE. 参照元 dkcAllocPathString(), dkcIsEffectivePath(), dkcPathStringElementInsert_Logic(), と dkcPathStringElementReplace_Logic().
00014 { 00015 00016 size_t i=0; 00017 if(s==NULL) return edk_FAILED; 00018 for(;i<size;i++){ 00019 if(dkcmIS_INVALID_PATH_CHAR(s[i])) 00020 { 00021 return FALSE; 00022 } 00023 } 00024 return TRUE; 00025 } |
|
バイナリデータをメモリに読み込む。dkcSaveBinary()と対
dkcOSIndependent.c の 390 行で定義されています。 参照先 dkcLoadFile(). 参照元 dkcAllocDeserialize(), と dkcFileCopyEx().
00390 {//="rb" 00391 return dkcLoadFile(data,size,fname,"rb",readsize); 00392 } |
|
dkcOSIndependent.c の 248 行で定義されています。 参照先 edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcLoadBinary(), と dkcLoadText().
00248 {//="rb" 00249 FILE *fp ; 00250 if(NULL==readsize || NULL==data || NULL==fname || NULL==mode){ 00251 return edk_FAILED; 00252 } 00253 fp = fopen( fname , mode ) ;//rb 00254 if(fp==NULL)return edk_FAILED; 00255 *readsize = fread( data , 1 , size , fp ) ; 00256 //fread( data , sizeof(size) , 1 , fp ) ; 00257 fclose( fp ) ; 00258 00259 return edk_SUCCEEDED; 00260 00261 } |
|
テキストデータをメモリに読み込む。dkcSaveText()と対
dkcOSIndependent.c の 397 行で定義されています。 参照先 dkcLoadFile().
00397 { 00398 return dkcLoadFile(text,length,fname,"rt",readsize); 00399 } |
|
dkcOSIndependent.c の 176 行で定義されています。 参照先 dkcReallocateEx(). 参照元 dkcBufferResize(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamResize(), dkcQueueDynamicPush(), dkcSingleListSetBuffer(), と dkcStackDynamicPush().
00178 { 00179 return dkcReallocateEx(realloc,NewPtr,NewSize,OldPtr); 00180 } |
|
dkcOSIndependent.c の 207 行で定義されています。 参照先 DKC_REALLOC_F_TYPE, dkcReallocateSizeFunction(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, と NULL.
00211 { 00212 void *ptr = NULL; 00213 size_t want_size = OldSize / 8; 00214 size_t ra_size = dkcReallocateSizeFunction(OldSize, 00215 (want_size <= 20) ? 20 : want_size 00216 ); 00217 size_t div = 8; 00218 size_t tmp_ra = ra_size / div; 00219 size_t i; 00220 if(NULL== your_realloc /*|| NULL==*NewPtr*/ || NULL == *OldPtr || 00221 0==OldSize || NULL==reallocated_size 00222 ){ 00223 return edk_ArgumentException;//アホ引数入れるな!! 00224 } 00225 00226 for(i=0;i<div;i++){ 00227 ptr = your_realloc(*OldPtr,ra_size); 00228 if(NULL==ptr){ 00229 if(OldSize > (ra_size -= tmp_ra)){//とりあえずtmp_ra分を引く。 00230 break;//こら望みなしだわ 00231 } 00232 continue; 00233 }else{ 00234 break; 00235 } 00236 } 00237 if(NULL==ptr) return edk_FAILED; 00238 00239 //更新 00240 *NewPtr = ptr; 00241 *OldPtr = NULL; 00242 00243 *reallocated_size = ra_size; 00244 00245 return edk_SUCCEEDED; 00246 } |
|
edk_SUCCEEDEDだったら成功
dkcOSIndependent.c の 182 行で定義されています。 参照先 DKC_REALLOC_F_TYPE, edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcReallocate().
00186 { 00187 void *ptr = NULL; 00188 00189 if(NULL== your_realloc /*|| NULL == *OldPtr || 00190 0==OldSize*/ 00191 ){ 00192 return edk_ArgumentException;//アホ引数入れるな!! 00193 } 00194 00195 ptr = your_realloc(*OldPtr,NewSize); 00196 if(NULL==ptr) return edk_FAILED; 00197 00198 //更新 00199 *OldPtr = NULL; 00200 *NewPtr = ptr; 00201 00202 return edk_SUCCEEDED; 00203 } |
|
dkcOSIndependent.c の 158 行で定義されています。 参照元 dkcMemoryStreamAutoExpandResize(), dkcQueueDynamicPush(), dkcReallocateAutoExpand(), と dkcStackDynamicPush().
00158 { 00159 //y=-25.43035 * pow(x,2) + 116.7214 00160 //y = -0.00000018 * pow(x,2) + 0.00019 00161 //y = -99.9999 * pow(OldSize,2) + 104857600; 00162 //y = 0.105263 * x * x + 10.52631 00163 //double x; 00164 // size_t size; 00165 if(OldSize <= 1024 * 5){//5KB以内なら2倍 00166 return OldSize * 2; 00167 }else if(OldSize >= 1024 * 1024 * 10 || 0==OldSize) 00168 {//10MB以上なら + ExpandSize 00169 return OldSize + ExpandSize; 00170 } 00171 //それ以外ならExpandSize * 3 00172 return OldSize + ExpandSize * 3; 00173 //return OldSize * 2;//ひでぇ関数だ。 00174 } |
|
endian change 16 bit version
dkcOSIndependent.c の 576 行で定義されています。 参照先 DKC_INLINE. 参照元 dkcStreamProcess16().
00576 {
00577 return (USHORT)((x >> 8) | (x << 8));
00578 }
|
|
dkcOSIndependent.c の 580 行で定義されています。 参照先 DKC_INLINE, と DWORD.
00580 {
00581 return (x << 24) | ((x & 0x0000ff00) << 8) | ((x & 0x00ff0000) >> 8) | (x >> 24);
00582 }
|
|
General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より.
dkcOSIndependent.c の 584 行で定義されています。 参照先 DKC_INLINE, dkcReverseEndian32(), DWORD, と ULONGLONG. 参照元 dkcStreamProcess64(), GetHeader(), HeaderWrite(), と ReverseEndianQWORD().
00584 { 00585 00586 return ( 00587 (ULONGLONG)dkcReverseEndian32((DWORD)(x & 0x00000000ffffffff)) << 32) 00588 | 00589 dkcReverseEndian32((DWORD)(x >> 32) 00590 ); 00591 00592 } |
|
fopenのファイル関数を使ってバイナリセーブを行う。
dkcOSIndependent.c の 377 行で定義されています。 参照先 dkcSaveFile(). 参照元 dkcCircularStreamDump(), dkcFileCopyEx(), と dkcFreeSerialize().
00377 {//="wb" 00378 return dkcSaveFile(data,size,fname,"wb"); 00379 } |
|
dkcOSIndependent.c の 262 行で定義されています。 参照先 edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcSaveBinary(), と dkcSaveText().
00263 { 00264 FILE *fp; 00265 if(NULL==fname || NULL==mode){ 00266 return edk_FAILED; 00267 } 00268 fp = fopen( fname , mode ) ;//wb 00269 if(fp==NULL) return edk_FAILED; 00270 fwrite( data , size , 1 , fp ) ; 00271 //fwrite( data , sizeof(size) , 1 , fp ) ; 00272 fclose( fp ) ; 00273 return edk_SUCCEEDED; 00274 } |
|
fopenでテキストセーブを行う
dkcOSIndependent.c の 394 行で定義されています。 参照先 dkcSaveFile().
00394 { 00395 return dkcSaveFile(text,length,fname,"wt"); 00396 } |
|
いわいるセレクト(選択)アルゴリズム n:配列の再台数 k:調べたい番号(小さいうちから)
dkcOSIndependent.c の 610 行で定義されています。 参照先 DKC_COMPARE_TYPE, dkcSwapFast(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, get_offset(), と NULL. 参照元 dkcSelectMax(), と dkcSelectMin().
00611 { 00612 00613 int i,j,left, right; 00614 00615 void *x = malloc(width); 00616 void *a = malloc(n * width); 00617 if(NULL==x || NULL==a){ 00618 return edk_ArgumentException; 00619 } 00620 if(n > INT_MAX){ 00621 return edk_FAILED; 00622 } 00623 00624 00625 memcpy(a,a_src,width * n); 00626 00627 00628 left = 0; right = n - 1; 00629 00630 while (left < right) 00631 { 00632 00633 memcpy(x, (const void *)get_offset(a,k * width),width); 00634 i = left; 00635 j = right; 00636 00637 for ( ; ; ) { 00638 00639 while( less(get_offset(a,i * width),x) > 0){ 00640 //while( *(int *)get_offset(a,i * width) < *(int *)x){ 00641 i++; 00642 } 00643 00644 while( less(x,get_offset(a,j * width)) > 0){ 00645 //while( *(int *)x < *(int *)get_offset(a,j * width) ){ 00646 j--; 00647 } 00648 00649 if (i > j){ 00650 break; 00651 } 00652 00653 00654 dkcSwapFast( 00655 get_offset(a,i * width), 00656 get_offset(a,j * width), 00657 width 00658 ); 00659 00660 i++; 00661 j--; 00662 } 00663 if (j < k){ 00664 left = i; 00665 } 00666 if (k < i){ 00667 right = j; 00668 } 00669 } 00670 00671 //ゲットする 00672 { 00673 //printf("%d",*(int *)get_offset(a,k * width)); 00674 00675 memcpy(dest,(const void *)get_offset(a,k * width),width); 00676 00677 } 00678 free(x); 00679 free(a); 00680 00681 return edk_SUCCEEDED; 00682 00683 } |
|
最大値を選択する
dkcOSIndependent.c の 686 行で定義されています。 参照先 DKC_COMPARE_TYPE, DKC_INLINE, dkcSelect(), と edk_FAILED.
00686 { 00687 if(n-1 > INT_MAX){ 00688 return edk_FAILED; 00689 } 00690 return dkcSelect(a,a_src,n,(int)n-1,width,less); 00691 } |
|
最小値を選択する
dkcOSIndependent.c の 692 行で定義されています。 参照先 DKC_COMPARE_TYPE, DKC_INLINE, と dkcSelect().
00692 { 00693 return dkcSelect(a,a_src,n,(int)0,width,less); 00694 } |
|
演算でSwapさせる。SWAP_NUM()マクロを参照。 dkcOSIndependent.c の 486 行で定義されています。 参照先 dkcSwap64(), と ULONGLONG. 参照元 dkcBubbleSort(), dkcCombSort(), と dkcShellSort().
00487 { 00488 dkcSwap64((ULONGLONG *)p1,(ULONGLONG *)p2,size); 00489 } |
|
dkcOSIndependent.c の 451 行で定義されています。 参照先 BYTE, SWAP_NUM, と ULONGLONG. 参照元 dkcSwap().
00451 { 00452 size_t i; 00453 BYTE buf; 00454 size_t mod_ = size % sizeof(ULONGLONG); 00455 size_t cnt = size / sizeof(ULONGLONG); 00456 //char *tp1 = (char *)p1,*tp2 = (char *)p2; 00457 for(i=0;i<cnt;i++){ 00458 SWAP_NUM(p1[i],p2[i]); 00459 } 00460 for(i=0;i<mod_;i++){ 00461 00462 //SWAP_NUM((char)tp1[size - mod_ + 1],(char)tp2[size - mod_ + i]); 00463 /*a = b - a ;\ 00464 b -= a ;\ 00465 a += b 00466 */ 00467 /*( ( ((char *) p2)[size - mod_ + i])) 00468 = (char)( ( ((char *) p2)[size - mod_ + i])) - 00469 (char)( ( ((char *) p1)[size - mod_ + i])); 00470 00471 ( ( ((char *) p2)[size - mod_ + i])) -= ( ( ((char *) p1)[size - mod_ + i])); 00472 00473 ( ( ((char *) p1)[size - mod_ + i])) += ( ( ((char *) p2)[size - mod_ + i])); 00474 */ 00475 00476 00477 buf = (((BYTE *)p1)[size - mod_ + i]); 00478 (((BYTE *)p1)[size - mod_ + i]) = 00479 (((BYTE *)p2)[size - mod_ + i]) ; 00480 (((BYTE *)p2)[size - mod_ + i]) = buf; 00481 00482 } 00483 00484 } |
|
どんな方法でもいいからともかく速くSwapさせる。
dkcOSIndependent.c の 401 行で定義されています。 参照先 dkcmNOT_ASSERT, と NULL. 参照元 dkcSelect().
00402 { 00403 void *p = malloc(size); 00404 dkcmNOT_ASSERT(NULL==p); 00405 memcpy(p,p1,size); 00406 memcpy(p1,p2,size); 00407 memcpy(p2,p,size); 00408 free(p); 00409 } |
|
dkcOSIndependent.c の 493 行で定義されています。 参照先 ULONGLONG.
00493 { 00494 //*dest = (ULONGLONG)((high << 32) + low); 00495 *dest = (ULONGLONG)high << 32; 00496 *dest += low; 00497 //( high * MAXDWORD ) + low; 00498 } |
|
dkcOSIndependent.c の 500 行で定義されています。 参照先 dkcmNOT_ASSERT, DWORD, と ULONGLONG.
00500 { 00501 DWORD *o = (DWORD *)&src; 00502 dkcmNOT_ASSERT(sizeof(DWORD) * 2 != sizeof(ULONGLONG)); 00503 //エンディアン問題をどうにかしよう! 00504 *dhigh = o[0]; 00505 *dlow = o[1]; 00506 } |
|
dkcOSIndependent.c の 599 行で定義されています。 参照先 BYTE. 参照元 dkcSelect().
|