#include "dkcDefined.h"
#include <limits.h>
#include <float.h>
#include <direct.h>
dkcOSIndependent.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_4char |
マクロ定義 | |
#define | ULONGLONG unsigned long long int |
#define | LONGLONG long long int |
#define | TRUE 1 |
#define | FALSE 0 |
#define | NULL 0 |
#define | dkcdPATH_SEP '/' |
#define | dkcdPATH_SEP_STR "/" |
#define | dkcdPATH_LIST_SEP ':' |
#define | dkcdPATH_LIST_SEP_STR ":" |
#define | dkcmIS_PATH_SEP(c) (dkcdPATH_SEP==(c)) |
#define | dkcmIS_INVALID_FILENAME_CHAR(c) |
#define | dkcmIS_INVALID_FOLDERNAME_CHAR(c) dkcmIS_INVALID_FILENAME_CHAR(c) |
#define | dkcmIS_INVALID_PATH_CHAR(c) |
#define | ULONGLONG_MAX DKINGYO_ULONGLONG_MAX |
#define | LONGLONG_MAX DKINGYO_LONGLONG_MAX |
#define | LONGLONG_MIN DKINGYO_LONGLONG_MIN |
#define | dkcdMAXPATH 1024 |
#define | dkcdMAXPATH_LEN dkcdMAXPATH |
#define | dkcdMAXPATH_BUFFER dkcdMAXPATH * 2 |
安全なMAX_PATHのバッファのサイズ なんかWindows2000だとこういう場合もあるらしいから | |
#define | MAYBE 2 |
#define | dkcmNOT_ASSERT_MESSAGE(ex, mes) ((void)0) |
#define | dkcmASSERT_MESSAGE(ex, mes) ((void)0) |
#define | dkcmNOT_ASSERT(ex) ((void)0) |
#define | dkcmASSERT(ex) ((void)0) |
#define | dkcmFORCE_NOT_ASSERT(ex) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) ) |
#define | dkcmFORCE_ASSERT(ex) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) ) |
#define | dkcmFORCE_NOT_ASSERT_MESSAGE(ex, mes) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) ) |
#define | dkcmFORCE_ASSERT_MESSAGE(ex, mes) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) ) |
#define | dkcmREVERSE_ENDIAN16(x) ( (USHORT)( (x >> 8) | (x << 8) ) ) |
#define | dkcmREVERSE_ENDIAN32(x) ( (x << 24) | ( (x & 0x0000ff00) << 8) | ( (x & 0x00ff0000) >> 8 ) | (x >> 24) ) |
#define | dkcmREVERSE_ENDIAN64(x) dkcReverseEndian64(x) |
#define | dkcIsBigEndian() (!dkcIsLittleEndian()) |
big endianならTRUE | |
型定義 | |
typedef unsigned long long | QWORD |
typedef unsigned char | dkctBOOL |
boolean型 | |
typedef void *(* | DKC_REALLOC_F_TYPE )(void *, size_t) |
typedef int | BOOL |
typedef unsigned char | BYTE |
typedef dkc_4char | DKC_4CHAR |
typedef int(WINAPIV * | DKC_COMPARE_TYPE )(const void *, const void *) |
関数 | |
DKC_EXTERN BOOL WINAPI | dkcIsNativePathString (const char *s, size_t size) |
FALSEならNativeなファイルパスではない。. | |
DKC_EXTERN size_t | dkcReallocateSizeFunction (size_t OldSize, size_t ExpandSize) |
DKC_EXTERN void *WINAPIV | dkcAllocate (size_t size) |
DKC_EXTERN int WINAPIV | dkcFree (void **p) |
DKC_EXTERN int WINAPI | dkcReallocate (void **NewPtr, size_t NewSize, void **OldPtr) |
DKC_EXTERN int WINAPI | dkcReallocateEx (DKC_REALLOC_F_TYPE your_realloc, void **NewPtr, size_t NewSize, void **OldPtr) |
edk_SUCCEEDEDだったら成功 | |
DKC_EXTERN int WINAPI | dkcReallocateAutoExpand (DKC_REALLOC_F_TYPE your_realloc, void **NewPtr, void **OldPtr, size_t OldSize, size_t *reallocated_size) |
DKC_EXTERN void WINAPI | dkcSwap (void *p1, void *p2, size_t size) |
DKC_EXTERN void WINAPI | dkcSwapFast (void *p1, void *p2, size_t size) |
DKC_EXTERN void WINAPI | dkcSwap64 (ULONGLONG *p1, ULONGLONG *p2, size_t size) |
DKC_EXTERN BOOL | dkcIs_foepn_mode (const char *s) |
fopenの時の第二引数が有効な値かどうか調べる。 | |
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 *, size_t size, FILE *fp) |
freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror) | |
DKC_EXTERN size_t WINAPI | dkcFWriteAll (void *, size_t size, FILE *fp) |
dkcFReadAll() dkcFReadAllのfwrite版 | |
DKC_EXTERN int WINAPI | dkcSaveBinary (const void *data, size_t size, const char *fname) |
fopenのファイル関数を使ってバイナリセーブを行う。 | |
DKC_EXTERN int WINAPI | dkcLoadBinary (void *data, size_t size, const char *fname, size_t *readsize) |
バイナリデータをメモリに読み込む。dkcSaveBinary()と対 | |
DKC_EXTERN int WINAPI | dkcSaveText (const char *text, size_t length, const char *fname) |
fopenでテキストセーブを行う | |
DKC_EXTERN int WINAPI | dkcLoadText (char *text, size_t length, const char *fname, size_t *readsize) |
テキストデータをメモリに読み込む。dkcSaveText()と対 | |
DKC_EXTERN BOOL WINAPI | dkcCreateEmptyFile (const char *filename) |
空ファイルを作る。 | |
DKC_EXTERN void WINAPI | dkcTwoDWORDToULONGLONG (ULONGLONG *dest, DWORD high, DWORD low) |
DKC_EXTERN void WINAPI | dkcULONGLONGToTwoDWORD (DWORD *dhigh, DWORD *dlow, ULONGLONG src) |
DKC_EXTERN void WINAPI | dkcLONGLONGToTwoLONG (LONG *high, LONG *low, LONGLONG src) |
DKC_EXTERN void WINAPI | dkcTwoLONGToLONGLONG (LONGLONG *dest, LONG high, LONG low) |
DKC_EXTERN int WINAPI | dkcErrorMessage (const char *expression, const char *filename, size_t line, const char *message,...) |
DKC_EXTERN const char *WINAPI | dkcGetPathSep () |
path separatorの入った文字列(1byte毎にpath separatorの文字定数が入っている)をゲット | |
DKC_EXTERN void WINAPI | dkcCheckMemoryLeak (BOOL flag) |
DKC_EXTERN BOOL WINAPI | dkcIsMMX () |
MMXが使えるならTRUE. | |
DKC_EXTERN ULONG | dkcReverseEndian32 (ULONG x) |
General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より. | |
DKC_EXTERN ULONGLONG | dkcReverseEndian64 (ULONGLONG x) |
General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より. | |
DKC_EXTERN USHORT | dkcReverseEndian16 (USHORT x) |
endian change 16 bit version | |
DKC_EXTERN BOOL | dkcIsLittleEndian () |
little endian ならTRUE | |
DKC_EXTERN BOOL | dkcCheckOverflowULONG (ULONG a1, ULONG a2) |
unsigned long型の二つの整数をプラスしたらオーバーフローするかどうかをチェックする。 | |
DKC_EXTERN int WINAPI | dkcSelect (void *dest, const void *a_src, size_t n, int k, size_t width,DKC_COMPARE_TYPE comp) |
いわいるセレクト(選択)アルゴリズム | |
DKC_EXTERN int WINAPI | dkcSelectMax (void *dest, const void *a, size_t n, size_t width,DKC_COMPARE_TYPE comp) |
DKC_EXTERN int WINAPI | dkcSelectMin (void *dest, const void *a, size_t n, size_t width,DKC_COMPARE_TYPE comp) |
DKC_INLINE int | dkcRotateShiftRightMemoryLogic (void *dest, size_t size, size_t n, void *workbuff, size_t worksize) |
DKC_EXTERN int WINAPI | dkcRotateShiftRightMemory (void *dest, size_t size, size_t n) |
dkcOSIndependent.h で定義されています。
|
dkcOSIndependent.h の 227 行で定義されています。 |
|
安全なMAX_PATHのバッファのサイズ なんかWindows2000だとこういう場合もあるらしいから
dkcOSIndependent.h の 244 行で定義されています。 参照元 dkcAllocPathString(), dkcCreateDirectory(), dkcGetCurrentDirectory(), dkcIsEffectivePath(), dkcPathStringNormalizeConcatenateLogic(), dkcPathStringNormalizeCopyLogic(), と dkcToAbsolutelyPath(). |
|
dkcOSIndependent.h の 233 行で定義されています。 参照元 dkcCreateDirectory(), と dkcCurrentDirectoryConcatenate(). |
|
dkcOSIndependent.h の 72 行で定義されています。 |
|
dkcOSIndependent.h の 73 行で定義されています。 |
|
dkcOSIndependent.h の 70 行で定義されています。 参照元 dkcCreateDirectory(), dkcGetPathSep(), dkcPathStringGetDirectory(), dkcPathStringGetFileName(), と dkcPushBackPathSep(). |
|
dkcOSIndependent.h の 71 行で定義されています。 |
|
big endianならTRUE
dkcOSIndependent.h の 495 行で定義されています。 |
|
dkcOSIndependent.h の 452 行で定義されています。 |
|
dkcOSIndependent.h の 450 行で定義されています。 |
|
dkcOSIndependent.h の 456 行で定義されています。 |
|
dkcOSIndependent.h の 458 行で定義されています。 |
|
|
dkcOSIndependent.h の 457 行で定義されています。 |
|
値: ( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \ || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') ) dkcOSIndependent.h の 76 行で定義されています。 |
|
dkcOSIndependent.h の 79 行で定義されています。 参照元 dkcCreateDirectory(). |
|
値: ( ( (c)=='\\') || ((c)=='*') || ((c)=='?') || ((c)== '"') || \ ((c) == '<') || ((c) == '>') || ((c) == '|') ) dkcOSIndependent.h の 82 行で定義されています。 |
|
dkcOSIndependent.h の 74 行で定義されています。 参照元 dkcCreateDirectory(). |
|
|
dkcOSIndependent.h の 449 行で定義されています。 参照元 dkcCreateDirectory(). |
|
dkcOSIndependent.h の 469 行で定義されています。 |
|
dkcOSIndependent.h の 471 行で定義されています。 |
|
dkcOSIndependent.h の 481 行で定義されています。 |
|
|
dkcOSIndependent.h の 53 行で定義されています。 |
|
dkcOSIndependent.h の 190 行で定義されています。 |
|
dkcOSIndependent.h の 193 行で定義されています。 |
|
dkcOSIndependent.h の 250 行で定義されています。 |
|
|
|
|
dkcOSIndependent.h の 187 行で定義されています。 |
|
|
|
|
|
dkcOSIndependent.h の 504 行で定義されています。 参照元 dkcSelect(), dkcSelectMax(), と dkcSelectMin(). |
|
dkcOSIndependent.h の 87 行で定義されています。 |
|
boolean型
dkcOSIndependent.h の 42 行で定義されています。 参照元 dkcAllocCRC(), と dkcCRCInit(). |
|
dkcOSIndependent.h の 38 行で定義されています。 参照元 Ch(), Default_Generate(), dkcSHA512Final(), dkcSHA512Load(), Maj(), ReverseEndianQWORD(), Rotate(), s0(), S0(), s1(), と S1(). |
|
|
dkcOSIndependent.c の 569 行で定義されています。 参照先 BOOL.
00569 { 00570 00571 } |
|
unsigned long型の二つの整数をプラスしたらオーバーフローするかどうかをチェックする。
dkcOSIndependent.c の 644 行で定義されています。 参照先 BOOL, DKC_INLINE, FALSE, SWAP_NUM, と TRUE. 参照元 dkcMemoryStreamAdapterPushBack(), と dkcRLEPackBitsEncode().
|
|
空ファイルを作る。
dkcOSIndependent.c の 385 行で定義されています。 参照先 BOOL, FALSE, NULL, と TRUE. 参照元 dkcFileCopyEx().
|
|
dkcOSIndependent.c の 32 行で定義されています。 参照先 edk_FAILED, MB, NULL, NULL_CHAR_ARRAY, ODS, SET_VA_LIST_C, と TRUE.
00034 { 00035 char s[1024]; 00036 char ss[1024 * 2]; 00037 00038 int va_list_result; 00039 va_list Valist; 00040 00041 NULL_CHAR_ARRAY(s); 00042 NULL_CHAR_ARRAY(ss); 00043 00044 if(message){ 00045 SET_VA_LIST_C(Valist,va_list_result,s,sizeof(s),message); 00046 }else{ 00047 //SET_VA_LIST(s,sizeof(s),"No message"); 00048 _snprintf(s,sizeof(s),"No message\n"); 00049 } 00050 00051 _snprintf(ss,sizeof(ss), 00052 "DKUTIL_ASSERT(%s):\nfile:%s / \n line:%d / \n message: %s", 00053 expression,filename,line,s); 00054 00055 00056 00057 #ifdef NDEBUG//release 00058 # ifdef WIN32 00059 ODS(ss); 00060 //::MessageBox(NULL,ss,"ERROR ASSERTION !!",MB_OK); 00061 { 00062 LPCTSTR name="ERROR_TEMP.txt"; 00063 { 00064 //ファイルをオープン 00065 FILE *fp; 00066 if(NULL != (fp = fopen( name , "at" ))){ 00067 00068 // エラーログファイルに書き出す 00069 fputs( ss , fp ) ; 00070 fclose( fp ) ; 00071 } 00072 } 00073 ShellExecute(NULL, "open",name, NULL, NULL, SW_SHOWNORMAL); 00074 DeleteFile(name); 00075 } 00076 MB("このテキストをこのソフトの開発者に渡せば、バグ発見の近道なります。\n \ 00077 開発者に知らせるときはこのテキストを転記してあげましょう。"); 00078 if(IDYES==MessageBox(NULL, 00079 "このままこのソフトを起動しつづけると、更なるエラーが発生する可能性があります。\n終了しますか?", 00080 "あってはいけない エラー!!!", 00081 MB_YESNO)) 00082 { 00083 exit(edk_FAILED); 00084 //terminate(); 00085 }else{ 00086 } 00087 # else //else of win32 00088 00089 fprintf(stderr,ss); 00090 exit(edk_FAILED); 00091 00092 # endif //end of win32 00093 00094 #else //debug 00095 00096 # ifdef WIN32 00097 ODS(ss); 00098 fprintf(stderr,ss); 00099 //_CrtDebugBreak(); 00100 DebugBreak(); 00101 # else //else of win32 00102 00103 fprintf(stderr,ss); 00104 Debugger(); 00105 00106 # endif //end of win32 00107 #endif//end of NDEBUG 00108 //assert(ss); 00109 00110 return TRUE; 00111 } |
|
fcloseのラッパー
dkcOSIndependent.c の 285 行で定義されています。 参照先 DKC_EXTERN, edk_ArgumentException, edk_SUCCEEDED, と NULL. 参照元 dkcDeleteCircularStream(), dkcFileCopyEx(), dkcFreeStream(), と GetHeader().
00285 { 00286 if(NULL==ptr || NULL==*ptr) return edk_ArgumentException; 00287 fclose(*ptr); 00288 *ptr = NULL; 00289 return edk_SUCCEEDED; 00290 } |
|
fopenのラッパー
dkcOSIndependent.c の 281 行で定義されています。 参照先 DKC_EXTERN. 参照元 dkcAllocStream(), dkcFileCopyEx(), dkcNewCircularStreamForFile(), と GetHeader().
00281 {
00282 return fopen(filename,mode);
00283 }
|
|
freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror)
dkcOSIndependent.c の 291 行で定義されています。 参照先 BYTE, DKC_EXTERN, と dkcmNOT_ASSERT. 参照元 GetHeader().
00292 { 00293 size_t count; 00294 size_t tc,tsize; 00295 BYTE *tbuffer; 00296 00297 //read size 00298 tsize = size; 00299 //temp variable 00300 tc = 0; 00301 //offset counter 00302 count = 0; 00303 //byte type pointer 00304 tbuffer = (BYTE *)buffer; 00305 for(;;) 00306 { 00307 //error check 00308 if(ferror(fp) ){ 00309 break; 00310 } 00311 if(feof(fp)){ 00312 break; 00313 } 00314 //read 00315 tc = fread(&tbuffer[count],1,tsize,fp); 00316 //update 00317 tsize -= tc; 00318 count += tc; 00319 00320 if(count == size){ 00321 break; 00322 } 00323 # ifdef DEBUG 00324 //ありえないエラーチェック 00325 dkcmNOT_ASSERT(count > size); 00326 # else 00327 if(count > size){ 00328 break; 00329 } 00330 # endif 00331 } 00332 return count; 00333 } |
|
|
dkcFReadAll() dkcFReadAllのfwrite版
dkcOSIndependent.c の 335 行で定義されています。 参照先 BYTE, DKC_EXTERN, と dkcmNOT_ASSERT.
00335 { 00336 size_t count; 00337 size_t tc,tsize; 00338 BYTE *tbuffer; 00339 00340 //read size 00341 tsize = size; 00342 //temp variable 00343 tc = 0; 00344 //offset counter 00345 count = 0; 00346 //byte type pointer 00347 tbuffer = (BYTE *)buffer; 00348 for(;;) 00349 { 00350 //error check 00351 if(ferror(fp) ){ 00352 break; 00353 } 00354 if(feof(fp)){ 00355 break; 00356 } 00357 //read 00358 tc = fwrite(&tbuffer[count],1,tsize,fp); 00359 //update 00360 tsize -= tc; 00361 count += tc; 00362 00363 if(count == size){ 00364 break; 00365 } 00366 # ifdef DEBUG 00367 //ありえないエラーチェック 00368 dkcmNOT_ASSERT(count > size); 00369 # else 00370 if(count > size){ 00371 break; 00372 } 00373 # endif 00374 } 00375 return count; 00376 00377 } |
|
path separatorの入った文字列(1byte毎にpath separatorの文字定数が入っている)をゲット
dkcOSIndependent.c の 574 行で定義されています。 参照先 dkcdPATH_SEP. 参照元 dkcSJIS_SearchPathSep(), と dkcSJIS_SearchPathSepLast().
00574 { 00575 #ifdef WIN32 00576 static char target[3]={dkcdPATH_SEP,'/','\0'}; 00577 #else 00578 static char target[3]={dkcdPATH_SEP,'\0'}; 00579 #endif 00580 return target; 00581 } |
|
fopenの時の第二引数が有効な値かどうか調べる。
dkcOSIndependent.c の 125 行で定義されています。
00125 { 00126 /* wrtb+ */ 00127 const char *ms= "wrtb+"; 00128 size_t slen = strlen(s); 00129 size_t mslen = strlen(ms); 00130 size_t i,j; 00131 int flag = FALSE; 00132 for(i=0;i<slen;i++){ 00133 for(j=0;j<mslen;j++){ 00134 if(ms[j]==s[i]){ 00135 flag = TRUE; 00136 break; 00137 } 00138 } 00139 if(TRUE!=flag){ 00140 return FALSE; 00141 }else{ 00142 flag = FALSE; 00143 } 00144 } 00145 return TRUE; 00146 } |
|
little endian ならTRUE
dkcOSIndependent.c の 638 行で定義されています。 参照先 BOOL, と DKC_INLINE. 参照元 dkcOpenFileWithSignature(), GetHeader(), HeaderWrite(), と SetStreamInfo().
00638 { 00639 int x=1; 00640 return (BOOL)((*(char*)&x)); 00641 } |
|
MMXが使えるならTRUE.
dkcOSIndependent.c の 615 行で定義されています。 参照元 CheckMMX().
00615 { 00616 return FALSE; 00617 } |
|
FALSEならNativeなファイルパスではない。.
dkcOSIndependent.c の 18 行で定義されています。 参照先 dkcmIS_INVALID_PATH_CHAR, edk_FAILED, FALSE, NULL, と TRUE. 参照元 dkcAllocPathString(), dkcIsEffectivePath(), dkcPathStringElementInsert_Logic(), と dkcPathStringElementReplace_Logic().
00018 { 00019 00020 size_t i=0; 00021 if(s==NULL) return edk_FAILED; 00022 for(;i<size;i++){ 00023 if(dkcmIS_INVALID_PATH_CHAR(s[i])) 00024 { 00025 return FALSE; 00026 } 00027 } 00028 return TRUE; 00029 } |
|
バイナリデータをメモリに読み込む。dkcSaveBinary()と対
dkcOSIndependent.c の 394 行で定義されています。 参照先 dkcLoadFile(). 参照元 dkcAllocDeserialize(), と dkcFileCopyEx().
00394 {//="rb" 00395 return dkcLoadFile(data,size,fname,"rb",readsize); 00396 } |
|
テキストデータをメモリに読み込む。dkcSaveText()と対
dkcOSIndependent.c の 401 行で定義されています。 参照先 dkcLoadFile().
00401 { 00402 return dkcLoadFile(text,length,fname,"rt",readsize); 00403 } |
|
dkcOSIndependent.c の 512 行で定義されています。 参照先 DKC_INLINE, dkcmNOT_ASSERT, と LONGLONG.
00512 { 00513 LONG *o = (LONG *)&src; 00514 dkcmNOT_ASSERT(sizeof(LONG) * 2 != sizeof(LONGLONG)); 00515 *high = o[0]; 00516 *low = o[1]; 00517 } |
|
dkcOSIndependent.c の 180 行で定義されています。 参照先 dkcReallocateEx(). 参照元 dkcBufferResize(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamResize(), dkcQueueDynamicPush(), dkcSingleListSetBuffer(), と dkcStackDynamicPush().
00182 { 00183 return dkcReallocateEx(realloc,NewPtr,NewSize,OldPtr); 00184 } |
|
dkcOSIndependent.c の 211 行で定義されています。 参照先 DKC_REALLOC_F_TYPE, dkcReallocateSizeFunction(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, と NULL.
00215 { 00216 void *ptr = NULL; 00217 size_t want_size = OldSize / 8; 00218 size_t ra_size = dkcReallocateSizeFunction(OldSize, 00219 (want_size <= 20) ? 20 : want_size 00220 ); 00221 size_t div = 8; 00222 size_t tmp_ra = ra_size / div; 00223 size_t i; 00224 if(NULL== your_realloc /*|| NULL==*NewPtr*/ || NULL == *OldPtr || 00225 0==OldSize || NULL==reallocated_size 00226 ){ 00227 return edk_ArgumentException;//アホ引数入れるな!! 00228 } 00229 00230 for(i=0;i<div;i++){ 00231 ptr = your_realloc(*OldPtr,ra_size); 00232 if(NULL==ptr){ 00233 if(OldSize > (ra_size -= tmp_ra)){//とりあえずtmp_ra分を引く。 00234 break;//こら望みなしだわ 00235 } 00236 continue; 00237 }else{ 00238 break; 00239 } 00240 } 00241 if(NULL==ptr) return edk_FAILED; 00242 00243 //更新 00244 *NewPtr = ptr; 00245 *OldPtr = NULL; 00246 00247 *reallocated_size = ra_size; 00248 00249 return edk_SUCCEEDED; 00250 } |
|
edk_SUCCEEDEDだったら成功
dkcOSIndependent.c の 186 行で定義されています。 参照先 DKC_REALLOC_F_TYPE, edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcReallocate().
00190 { 00191 void *ptr = NULL; 00192 00193 if(NULL== your_realloc /*|| NULL == *OldPtr || 00194 0==OldSize*/ 00195 ){ 00196 return edk_ArgumentException;//アホ引数入れるな!! 00197 } 00198 00199 ptr = your_realloc(*OldPtr,NewSize); 00200 if(NULL==ptr) return edk_FAILED; 00201 00202 //更新 00203 *OldPtr = NULL; 00204 *NewPtr = ptr; 00205 00206 return edk_SUCCEEDED; 00207 } |
|
dkcOSIndependent.c の 162 行で定義されています。 参照元 dkcMemoryStreamAutoExpandResize(), dkcQueueDynamicPush(), dkcReallocateAutoExpand(), と dkcStackDynamicPush().
00162 { 00163 //y=-25.43035 * pow(x,2) + 116.7214 00164 //y = -0.00000018 * pow(x,2) + 0.00019 00165 //y = -99.9999 * pow(OldSize,2) + 104857600; 00166 //y = 0.105263 * x * x + 10.52631 00167 //double x; 00168 // size_t size; 00169 if(OldSize <= 1024 * 5){//5KB以内なら2倍 00170 return OldSize * 2; 00171 }else if(OldSize >= 1024 * 1024 * 10 || 0==OldSize) 00172 {//10MB以上なら + ExpandSize 00173 return OldSize + ExpandSize; 00174 } 00175 //それ以外ならExpandSize * 3 00176 return OldSize + ExpandSize * 3; 00177 //return OldSize * 2;//ひでぇ関数だ。 00178 } |
|
endian change 16 bit version
dkcOSIndependent.c の 621 行で定義されています。 参照先 DKC_INLINE. 参照元 dkcStreamProcess16().
00621 {
00622 return (USHORT)((x >> 8) | (x << 8));
00623 }
|
|
General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より.
参照元 dkcReverseEndian64(), dkcStreamProcess32(), GetHeader(), HeaderWrite(), ReverseEndian(), と ReverseEndianDWORD(). |
|
General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より.
dkcOSIndependent.c の 629 行で定義されています。 参照先 DKC_INLINE, dkcReverseEndian32(), DWORD, と ULONGLONG. 参照元 dkcStreamProcess64(), GetHeader(), HeaderWrite(), と ReverseEndianQWORD().
00629 { 00630 00631 return ( 00632 (ULONGLONG)dkcReverseEndian32((DWORD)(x & 0x00000000ffffffff)) << 32) 00633 | 00634 dkcReverseEndian32((DWORD)(x >> 32) 00635 ); 00636 00637 } |
|
dkcOSIndependent.c の 886 行で定義されています。 参照先 dkcRotateShiftRightMemoryLogic(), DKUTIL_SUCCEEDED, edk_FAILED, edk_OutOfMemory, edk_SUCCEEDED, と NULL.
00886 { 00887 //size_t i = 0; 00888 void *pd = NULL; 00889 int r = edk_FAILED; 00890 00891 pd = malloc(num); 00892 if(NULL==pd){ 00893 return edk_OutOfMemory; 00894 } 00895 if(DKUTIL_SUCCEEDED(dkcRotateShiftRightMemoryLogic(d,size,num,pd,num))){ 00896 r = edk_SUCCEEDED; 00897 } 00898 00899 free(pd); 00900 00901 return r; 00902 00903 } |
|
dkcOSIndependent.c の 864 行で定義されています。 参照先 BYTE, DKC_INLINE, edk_FAILED, と edk_SUCCEEDED. 参照元 dkcRotateShiftRightMemory().
00865 { 00866 BYTE *dest = (BYTE *)d; 00867 size_t temp; 00868 00869 if(n > worksize){ 00870 return edk_FAILED; 00871 } 00872 for(;;){ 00873 if(n < size){ 00874 break; 00875 } 00876 n -= size; 00877 } 00878 temp = size - n; 00879 memcpy(workbuff,dest + temp,n); 00880 memmove(dest + n,dest,temp); 00881 memcpy(dest,workbuff,n); 00882 return edk_SUCCEEDED; 00883 00884 } |
|
fopenのファイル関数を使ってバイナリセーブを行う。
dkcOSIndependent.c の 381 行で定義されています。 参照先 dkcSaveFile(). 参照元 dkcCircularStreamDump(), dkcFileCopyEx(), と dkcFreeSerialize().
00381 {//="wb" 00382 return dkcSaveFile(data,size,fname,"wb"); 00383 } |
|
fopenでテキストセーブを行う
dkcOSIndependent.c の 398 行で定義されています。 参照先 dkcSaveFile().
00398 { 00399 return dkcSaveFile(text,length,fname,"wt"); 00400 } |
|
いわいるセレクト(選択)アルゴリズム n:配列の再台数 k:調べたい番号(小さいうちから)
dkcOSIndependent.c の 671 行で定義されています。 参照先 DKC_COMPARE_TYPE, dkcSwapFast(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, get_offset(), と NULL. 参照元 dkcSelectMax(), と dkcSelectMin().
00672 { 00673 00674 int i,j,left, right; 00675 00676 void *x = malloc(width); 00677 void *a = malloc(n * width); 00678 if(NULL==x || NULL==a){ 00679 return edk_ArgumentException; 00680 } 00681 if(n > INT_MAX){ 00682 return edk_FAILED; 00683 } 00684 00685 00686 memcpy(a,a_src,width * n); 00687 00688 00689 left = 0; right = n - 1; 00690 00691 while (left < right) 00692 { 00693 00694 memcpy(x, (const void *)get_offset(a,k * width),width); 00695 i = left; 00696 j = right; 00697 00698 for ( ; ; ) { 00699 00700 while( less(get_offset(a,i * width),x) > 0){ 00701 //while( *(int *)get_offset(a,i * width) < *(int *)x){ 00702 i++; 00703 } 00704 00705 while( less(x,get_offset(a,j * width)) > 0){ 00706 //while( *(int *)x < *(int *)get_offset(a,j * width) ){ 00707 j--; 00708 } 00709 00710 if (i > j){ 00711 break; 00712 } 00713 00714 00715 dkcSwapFast( 00716 get_offset(a,i * width), 00717 get_offset(a,j * width), 00718 width 00719 ); 00720 00721 i++; 00722 j--; 00723 } 00724 if (j < k){ 00725 left = i; 00726 } 00727 if (k < i){ 00728 right = j; 00729 } 00730 } 00731 00732 //ゲットする 00733 { 00734 //printf("%d",*(int *)get_offset(a,k * width)); 00735 00736 memcpy(dest,(const void *)get_offset(a,k * width),width); 00737 00738 } 00739 free(x); 00740 free(a); 00741 00742 return edk_SUCCEEDED; 00743 00744 } |
|
最大値を選択する
dkcOSIndependent.c の 747 行で定義されています。 参照先 DKC_COMPARE_TYPE, DKC_INLINE, dkcSelect(), と edk_FAILED.
00747 { 00748 if(n-1 > INT_MAX){ 00749 return edk_FAILED; 00750 } 00751 return dkcSelect(a,a_src,n,(int)n-1,width,less); 00752 } |
|
最小値を選択する
dkcOSIndependent.c の 753 行で定義されています。 参照先 DKC_COMPARE_TYPE, DKC_INLINE, と dkcSelect().
00753 { 00754 return dkcSelect(a,a_src,n,(int)0,width,less); 00755 } |
|
演算でSwapさせる。SWAP_NUM()マクロを参照。 dkcOSIndependent.c の 490 行で定義されています。 参照先 dkcSwap64(), と ULONGLONG. 参照元 dkcBubbleSort(), dkcCombSort(), と dkcShellSort().
00491 { 00492 dkcSwap64((ULONGLONG *)p1,(ULONGLONG *)p2,size); 00493 } |
|
dkcOSIndependent.c の 455 行で定義されています。 参照先 BYTE, SWAP_NUM, と ULONGLONG. 参照元 dkcSwap().
00455 { 00456 size_t i; 00457 BYTE buf; 00458 size_t mod_ = size % sizeof(ULONGLONG); 00459 size_t cnt = size / sizeof(ULONGLONG); 00460 //char *tp1 = (char *)p1,*tp2 = (char *)p2; 00461 for(i=0;i<cnt;i++){ 00462 SWAP_NUM(p1[i],p2[i]); 00463 } 00464 for(i=0;i<mod_;i++){ 00465 00466 //SWAP_NUM((char)tp1[size - mod_ + 1],(char)tp2[size - mod_ + i]); 00467 /*a = b - a ;\ 00468 b -= a ;\ 00469 a += b 00470 */ 00471 /*( ( ((char *) p2)[size - mod_ + i])) 00472 = (char)( ( ((char *) p2)[size - mod_ + i])) - 00473 (char)( ( ((char *) p1)[size - mod_ + i])); 00474 00475 ( ( ((char *) p2)[size - mod_ + i])) -= ( ( ((char *) p1)[size - mod_ + i])); 00476 00477 ( ( ((char *) p1)[size - mod_ + i])) += ( ( ((char *) p2)[size - mod_ + i])); 00478 */ 00479 00480 00481 buf = (((BYTE *)p1)[size - mod_ + i]); 00482 (((BYTE *)p1)[size - mod_ + i]) = 00483 (((BYTE *)p2)[size - mod_ + i]) ; 00484 (((BYTE *)p2)[size - mod_ + i]) = buf; 00485 00486 } 00487 00488 } |
|
どんな方法でもいいからともかく速くSwapさせる。
dkcOSIndependent.c の 405 行で定義されています。 参照先 dkcmNOT_ASSERT, と NULL. 参照元 dkcSelect().
00406 { 00407 void *p = malloc(size); 00408 dkcmNOT_ASSERT(NULL==p); 00409 memcpy(p,p1,size); 00410 memcpy(p1,p2,size); 00411 memcpy(p2,p,size); 00412 free(p); 00413 } |
|
dkcOSIndependent.c の 497 行で定義されています。 参照先 DKC_INLINE, と ULONGLONG.
00497 { 00498 //*dest = (ULONGLONG)((high << 32) + low); 00499 *dest = (ULONGLONG)high << 32; 00500 *dest += low; 00501 //( high * MAXDWORD ) + low; 00502 } |
|
dkcOSIndependent.c の 519 行で定義されています。 参照先 DKC_INLINE, と LONGLONG.
00519 { 00520 //*dest = (ULONGLONG)((high << 32) + low); 00521 *dest = (LONGLONG)high << 32; 00522 *dest += low; 00523 00524 } |
|
dkcOSIndependent.c の 504 行で定義されています。 参照先 DKC_INLINE, dkcmNOT_ASSERT, DWORD, と ULONGLONG.
00504 { 00505 DWORD *o = (DWORD *)&src; 00506 dkcmNOT_ASSERT(sizeof(DWORD) * 2 != sizeof(ULONGLONG)); 00507 //エンディアン問題をどうにかしよう! 00508 *dhigh = o[0]; 00509 *dlow = o[1]; 00510 } |