#include "dkcDefined.h"
#include <limits.h>
#include <float.h>
#include <assert.h>
#include <stdlib.h>
#include <direct.h>
dkcOSIndependent.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_4char |
マクロ定義 | |
#define | DWORD uint32 |
#define | WORD uint16 |
#define | BYTE uint8 |
#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 | dkcmGETBYTE(x, y) ((x)>>(8*(y))) |
this version of the macro is fastest on Pentium 3 and Pentium 4 with MSVC 6 SP5 w/ Processor Pack | |
#define | dkcmGETBYTE8(x, y) (uint8)dkcmGETBYTE(x,y) |
#define | dkcmGETBYTE32(x, y) (uint32)dkcmGETBYTE8(x,y) |
#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 aword | DKC_4BYTE_UNION_BIG_ENDIAN_BASE |
typedef dkc4ByteUnionLittleEndianBase | DKC_4BYTE_UNION_LITTLE_ENDIAN_BASE |
typedef void * | DKC_WINAPI_PROC_F_TYPE |
typedef dkc_4char | DKC_4CHAR |
typedef void *(WINAPIV * | DKC_ALLOC_FUNC_TYPE )(size_t) |
malloc()系 関数の型 | |
typedef void(WINAPIV * | DKC_FREE_FUNC_TYPE )(void *) |
free()系 関数の型 | |
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 | dkcMallocAdapter (size_t) |
DKC_EXTERN void WINAPIV | dkcFreeAdapter (void *) |
DKC_EXTERN void *WINAPIV | dkcAllocate (size_t size) |
DKC_EXTERN int WINAPIV | dkcFree (void **p) |
DKC_EXTERN void *WINAPIV | dkcAllocateFast (size_t size) |
DKC_EXTERN void *WINAPIV | dkcAllocateFill (size_t size, BYTE fill) |
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のファイル関数を使ってバイナリセーブを行う。 類似: dkcMemoryToFile() | |
DKC_EXTERN int WINAPI | dkcLoadBinary (void *data, size_t size, const char *fname, size_t *readsize) |
バイナリデータをメモリに読み込む。dkcSaveBinary()と対 類似: dkcFileToMemory() | |
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 int | dkcDynamicCheckEnvironment (BOOL isForceExit) |
DKC_EXTERN void WINAPI | dkcCheckMemoryLeak (BOOL flag) |
flag[in] TRUEでチェックを有効 | |
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 size_t | dkcNumOfBits (uint32 bits) |
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 の 91 行で定義されています。 参照元 bse_basic_logic(), と ProcessCall(). |
|
dkcOSIndependent.h の 348 行で定義されています。 参照元 dkcPathStringConcatenate(), dkcPathStringCopy(), と dkcSemiRealRandomInit(). |
|
安全なMAX_PATHのバッファのサイズ なんかWindows2000だとこういう場合もあるらしいから
dkcOSIndependent.h の 365 行で定義されています。 参照元 dkcAllocPathString(), dkcCreateDirectory(), dkcGetCurrentDirectory(), dkcIsEffectivePath(), dkcPathStringNormalizeConcatenateLogic(), dkcPathStringNormalizeCopyLogic(), と dkcToAbsolutelyPath(). |
|
dkcOSIndependent.h の 354 行で定義されています。 参照元 dkcCreateDirectory(), と dkcCurrentDirectoryConcatenate(). |
|
dkcOSIndependent.h の 117 行で定義されています。 |
|
dkcOSIndependent.h の 118 行で定義されています。 |
|
dkcOSIndependent.h の 115 行で定義されています。 参照元 dkcCreateDirectory(), dkcGetPathSep(), dkcPathStringGetDirectory(), と dkcPushBackPathSep(). |
|
dkcOSIndependent.h の 116 行で定義されています。 |
|
big endianならTRUE
dkcOSIndependent.h の 640 行で定義されています。 |
|
|
dkcOSIndependent.h の 590 行で定義されています。 |
|
dkcOSIndependent.h の 596 行で定義されています。 |
|
dkcOSIndependent.h の 598 行で定義されています。 |
|
|
dkcOSIndependent.h の 597 行で定義されています。 |
|
this version of the macro is fastest on Pentium 3 and Pentium 4 with MSVC 6 SP5 w/ Processor Pack
dkcOSIndependent.h の 376 行で定義されています。 参照元 update(). |
|
dkcOSIndependent.h の 378 行で定義されています。 |
|
dkcOSIndependent.h の 377 行で定義されています。 |
|
値: ( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \ || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') ) dkcOSIndependent.h の 121 行で定義されています。 |
|
dkcOSIndependent.h の 124 行で定義されています。 参照元 dkcCreateDirectory(). |
|
値: ( ( (c)=='\\') || ((c)=='*') || ((c)=='?') || ((c)== '"') || \ ((c) == '<') || ((c) == '>') || ((c) == '|') ) dkcOSIndependent.h の 127 行で定義されています。 |
|
dkcOSIndependent.h の 119 行で定義されています。 参照元 dkcCreateDirectory(). |
|
|
dkcOSIndependent.h の 589 行で定義されています。 参照元 dkcCreateDirectory(). |
|
dkcOSIndependent.h の 615 行で定義されています。 |
|
dkcOSIndependent.h の 617 行で定義されています。 |
|
dkcOSIndependent.h の 627 行で定義されています。 |
|
|
|
dkcOSIndependent.h の 100 行で定義されています。 |
|
dkcOSIndependent.h の 330 行で定義されています。 |
|
dkcOSIndependent.h の 333 行で定義されています。 |
|
dkcOSIndependent.h の 371 行で定義されています。 |
|
|
|
|
dkcOSIndependent.h の 327 行で定義されています。 |
|
dkcOSIndependent.h の 88 行で定義されています。 |
|
|
dkcOSIndependent.h の 298 行で定義されています。 |
|
dkcOSIndependent.h の 300 行で定義されています。 |
|
|
|
malloc()系 関数の型
dkcOSIndependent.h の 464 行で定義されています。 参照元 alloc_sameobjectpool_outer(), dkcAllocSameObjectPool(), と dkcSameObjectPoolInit(). |
|
|
free()系 関数の型
dkcOSIndependent.h の 466 行で定義されています。 参照元 dkcAllocSameObjectPool(), dkcSameObjectPoolInit(), と free_sameobjectpool_outer(). |
|
dkcOSIndependent.h の 132 行で定義されています。 |
|
dkcOSIndependent.h の 317 行で定義されています。 参照元 dkcSHO_MD5Init(), dkcSHO_SHA1Init(), dkcSHO_SHA256Init(), dkcSHO_SHA384Init(), と dkcSHO_SHA512Init(). |
|
boolean型
dkcOSIndependent.h の 65 行で定義されています。 参照元 dkcAllocCRC(), dkcCRCInit(), と shc(). |
|
dkcOSIndependent.h の 61 行で定義されています。 参照元 Ch(), Default_Generate(), dkcSHA512Final(), dkcSHA512Load(), Maj(), ReverseEndianQWORD(), Rotate(), s0(), S0(), s1(), と S1(). |
|
|
dkcOSIndependent.c の 167 行で定義されています。 参照元 alloc_2tree_node(), dkcAllocateFill(), と dkcSameObjectPoolReserveFast().
00167 {
00168 return malloc(size);
00169 }
|
|
dkcOSIndependent.c の 161 行で定義されています。 参照先 BYTE, dkcAllocateFast(), と NULL. 参照元 dkcAllocate().
00161 { 00162 void *p = dkcAllocateFast(size); 00163 if(NULL==p) return NULL; 00164 memset(p,fill,size); 00165 return p; 00166 } |
|
flag[in] TRUEでチェックを有効
dkcOSIndependent.c の 631 行で定義されています。 参照先 BOOL.
00631 { 00632 00633 } |
|
unsigned long型の二つの整数をプラスしたらオーバーフローするかどうかをチェックする。
dkcOSIndependent.c の 706 行で定義されています。 参照元 dkcMemoryStreamAdapterPushBack(), dkcRLEPackBitsDecode(), と dkcRLEPackBitsEncode().
|
|
空ファイルを作る。
dkcOSIndependent.c の 446 行で定義されています。 参照先 BOOL, FALSE, NULL, と TRUE. 参照元 dkcFileCopyEx().
|
|
dkcOSIndependent.c の 47 行で定義されています。 参照先 BOOL.
00047 { 00048 00049 } |
|
dkcOSIndependent.c の 68 行で定義されています。
00070 { 00071 char s[1024]; 00072 char ss[1024 * 2]; 00073 00074 int va_list_result; 00075 va_list Valist; 00076 00077 NULL_CHAR_ARRAY(s); 00078 NULL_CHAR_ARRAY(ss); 00079 00080 if(message){ 00081 SET_VA_LIST_C(Valist,va_list_result,s,sizeof(s),message); 00082 }else{ 00083 //SET_VA_LIST(s,sizeof(s),"No message"); 00084 _snprintf(s,sizeof(s),"No message\n"); 00085 } 00086 00087 _snprintf(ss,sizeof(ss), 00088 "DKUTIL_ASSERT(%s):\nfile:%s / \n line:%d / \n message: %s", 00089 expression,filename,line,s); 00090 00091 00092 00093 #ifdef NDEBUG//release 00094 # ifdef WIN32 00095 ODS(ss); 00096 //::MessageBox(NULL,ss,"ERROR ASSERTION !!",MB_OK); 00097 { 00098 LPCTSTR name="ERROR_TEMP.txt"; 00099 { 00100 //ファイルをオープン 00101 FILE *fp; 00102 if(NULL != (fp = fopen( name , "at" ))){ 00103 00104 // エラーログファイルに書き出す 00105 fputs( ss , fp ) ; 00106 fclose( fp ) ; 00107 Sleep(800); 00108 } 00109 } 00110 ShellExecute(NULL, "open",name, NULL, NULL, SW_SHOWNORMAL); 00111 //Sleep(1000); 00112 //DeleteFile(name); 00113 } 00114 MB("このテキストをこのソフトの開発者に渡せば、バグ発見の近道なります。\n \ 00115 開発者に知らせるときはこのテキストを転記してあげましょう。"); 00116 if(IDYES==MessageBox(NULL, 00117 "このままこのソフトを起動しつづけると、更なるエラーが発生する可能性があります。\n終了しますか?", 00118 "あってはいけない エラー!!!", 00119 MB_YESNO)) 00120 { 00121 exit(edk_FAILED); 00122 //terminate(); 00123 }else{ 00124 } 00125 # else //else of win32 00126 00127 fprintf(stderr,ss); 00128 exit(edk_FAILED); 00129 00130 # endif //end of win32 00131 00132 #else //debug 00133 00134 # ifdef WIN32 00135 ODS(ss); 00136 fprintf(stderr,ss); 00137 //_CrtDebugBreak(); 00138 DebugBreak(); 00139 # else //else of win32 00140 00141 fprintf(stderr,ss); 00142 Debugger(); 00143 00144 # endif //end of win32 00145 #endif//end of NDEBUG 00146 //assert(ss); 00147 00148 return TRUE; 00149 } |
|
fcloseのラッパー
dkcOSIndependent.c の 346 行で定義されています。 参照先 NULL. 参照元 dkcDeleteCircularStream(), dkcFileCopyEx(), dkcFreeStream(), と GetHeader().
|
|
fopenのラッパー
dkcOSIndependent.c の 342 行で定義されています。 参照元 dkcAllocStream(), dkcFileCopyEx(), dkcNewCircularStreamForFile(), と GetHeader().
00342 {
00343 return fopen(filename,mode);
00344 }
|
|
freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror)
dkcOSIndependent.c の 352 行で定義されています。 参照先 BYTE, と dkcmNOT_ASSERT. 参照元 GetHeader().
00353 { 00354 size_t count; 00355 size_t tc,tsize; 00356 BYTE *tbuffer; 00357 00358 //read size 00359 tsize = size; 00360 //temp variable 00361 tc = 0; 00362 //offset counter 00363 count = 0; 00364 //byte type pointer 00365 tbuffer = (BYTE *)buffer; 00366 for(;;) 00367 { 00368 //error check 00369 if(ferror(fp) ){ 00370 break; 00371 } 00372 if(feof(fp)){ 00373 break; 00374 } 00375 //read 00376 tc = fread(&tbuffer[count],1,tsize,fp); 00377 //update 00378 tsize -= tc; 00379 count += tc; 00380 00381 if(count == size){ 00382 break; 00383 } 00384 # ifdef DEBUG 00385 //ありえないエラーチェック 00386 dkcmNOT_ASSERT(count > size); 00387 # else 00388 if(count > size){ 00389 break; 00390 } 00391 # endif 00392 } 00393 return count; 00394 } |
|
|
dkcOSIndependent.c の 155 行で定義されています。
00155 {
00156 if(p){
00157 free(p);
00158 }
00159 }
|
|
dkcFReadAll() dkcFReadAllのfwrite版
dkcOSIndependent.c の 396 行で定義されています。 参照先 BYTE, と dkcmNOT_ASSERT.
00396 { 00397 size_t count; 00398 size_t tc,tsize; 00399 BYTE *tbuffer; 00400 00401 //read size 00402 tsize = size; 00403 //temp variable 00404 tc = 0; 00405 //offset counter 00406 count = 0; 00407 //byte type pointer 00408 tbuffer = (BYTE *)buffer; 00409 for(;;) 00410 { 00411 //error check 00412 if(ferror(fp) ){ 00413 break; 00414 } 00415 if(feof(fp)){ 00416 break; 00417 } 00418 //read 00419 tc = fwrite(&tbuffer[count],1,tsize,fp); 00420 //update 00421 tsize -= tc; 00422 count += tc; 00423 00424 if(count == size){ 00425 break; 00426 } 00427 # ifdef DEBUG 00428 //ありえないエラーチェック 00429 dkcmNOT_ASSERT(count > size); 00430 # else 00431 if(count > size){ 00432 break; 00433 } 00434 # endif 00435 } 00436 return count; 00437 00438 } |
|
path separatorの入った文字列(1byte毎にpath separatorの文字定数が入っている)をゲット
dkcOSIndependent.c の 636 行で定義されています。 参照先 dkcdPATH_SEP. 参照元 dkcSJIS_SearchPathSep(), と dkcSJIS_SearchPathSepLast().
00636 { 00637 #ifdef WIN32 00638 static char target[3]={dkcdPATH_SEP,'/','\0'}; 00639 #else 00640 static char target[3]={dkcdPATH_SEP,'\0'}; 00641 #endif 00642 return target; 00643 } |
|
fopenの時の第二引数が有効な値かどうか調べる。
dkcOSIndependent.c の 186 行で定義されています。
00186 { 00187 /* wrtb+ */ 00188 const char *ms= "wrtb+"; 00189 size_t slen = strlen(s); 00190 size_t mslen = strlen(ms); 00191 size_t i,j; 00192 int flag = FALSE; 00193 for(i=0;i<slen;i++){ 00194 for(j=0;j<mslen;j++){ 00195 if(ms[j]==s[i]){ 00196 flag = TRUE; 00197 break; 00198 } 00199 } 00200 if(TRUE!=flag){ 00201 return FALSE; 00202 }else{ 00203 flag = FALSE; 00204 } 00205 } 00206 return TRUE; 00207 } |
|
little endian ならTRUE
dkcOSIndependent.c の 700 行で定義されています。 参照先 BOOL. 参照元 dkcOpenFileWithSignature(), GetHeader(), HeaderWrite(), と SetStreamInfo().
00700 { 00701 int x=1; 00702 return (BOOL)((*(char*)&x)); 00703 } |
|
MMXが使えるならTRUE.
dkcOSIndependent.c の 677 行で定義されています。 参照元 CheckMMX().
00677 { 00678 return FALSE; 00679 } |
|
FALSEならNativeなファイルパスではない。.
dkcOSIndependent.c の 54 行で定義されています。 参照先 dkcmIS_INVALID_PATH_CHAR, FALSE, NULL, と TRUE. 参照元 dkcAllocPathString(), dkcIsEffectivePath(), dkcPathStringElementInsert_Logic(), と dkcPathStringElementReplace_Logic().
00054 { 00055 00056 size_t i=0; 00057 if(s==NULL) return edk_FAILED; 00058 for(;i<size;i++){ 00059 if(dkcmIS_INVALID_PATH_CHAR(s[i])) 00060 { 00061 return FALSE; 00062 } 00063 } 00064 return TRUE; 00065 } |
|
バイナリデータをメモリに読み込む。dkcSaveBinary()と対 類似: dkcFileToMemory()
dkcOSIndependent.c の 455 行で定義されています。 参照先 dkcLoadFile(). 参照元 dkcAllocDeserialize(), と dkcFileCopyEx().
00455 {//="rb" 00456 return dkcLoadFile(data,size,fname,"rb",readsize); 00457 } |
|
テキストデータをメモリに読み込む。dkcSaveText()と対
dkcOSIndependent.c の 462 行で定義されています。 参照先 dkcLoadFile().
00462 { 00463 return dkcLoadFile(text,length,fname,"rt",readsize); 00464 } |
|
dkcOSIndependent.c の 574 行で定義されています。 参照先 dkcmNOT_ASSERT, と LONGLONG.
00574 { 00575 LONG *o = (LONG *)&src; 00576 dkcmNOT_ASSERT(sizeof(LONG) * 2 != sizeof(LONGLONG)); 00577 *high = o[0]; 00578 *low = o[1]; 00579 } |
|
dkcOSIndependent.c の 151 行で定義されています。 参照元 dkcSameObjectPoolAlloc(), と dkcSameObjectPoolInit().
00151 {
00152 return malloc(s);
00153 }
|
|
dkcOSIndependent.c の 721 行で定義されています。
00721 {
00722 bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
00723 bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
00724 bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f);
00725 bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff);
00726 return (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff);
00727 }
|
|
dkcOSIndependent.c の 241 行で定義されています。 参照先 dkcReallocateEx(). 参照元 dkc2TreeSetBuffer(), dkcBufferResize(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamResize(), dkcQueueDynamicPush(), dkcSingleListSetBuffer(), と dkcStackDynamicPush().
00243 { 00244 return dkcReallocateEx(realloc,NewPtr,NewSize,OldPtr); 00245 } |
|
dkcOSIndependent.c の 272 行で定義されています。 参照先 DKC_REALLOC_F_TYPE, dkcReallocateSizeFunction(), と NULL.
00276 { 00277 void *ptr = NULL; 00278 size_t want_size = OldSize / 8; 00279 size_t ra_size = dkcReallocateSizeFunction(OldSize, 00280 (want_size <= 20) ? 20 : want_size 00281 ); 00282 size_t div = 8; 00283 size_t tmp_ra = ra_size / div; 00284 size_t i; 00285 if(NULL== your_realloc /*|| NULL==*NewPtr*/ || NULL == *OldPtr || 00286 0==OldSize || NULL==reallocated_size 00287 ){ 00288 return edk_ArgumentException;//アホ引数入れるな!! 00289 } 00290 00291 for(i=0;i<div;i++){ 00292 ptr = your_realloc(*OldPtr,ra_size); 00293 if(NULL==ptr){ 00294 if(OldSize > (ra_size -= tmp_ra)){//とりあえずtmp_ra分を引く。 00295 break;//こら望みなしだわ 00296 } 00297 continue; 00298 }else{ 00299 break; 00300 } 00301 } 00302 if(NULL==ptr) return edk_FAILED; 00303 00304 //更新 00305 *NewPtr = ptr; 00306 *OldPtr = NULL; 00307 00308 *reallocated_size = ra_size; 00309 00310 return edk_SUCCEEDED; 00311 } |
|
edk_SUCCEEDEDだったら成功
dkcOSIndependent.c の 247 行で定義されています。 参照先 DKC_REALLOC_F_TYPE, と NULL. 参照元 dkcReallocate().
00251 { 00252 void *ptr = NULL; 00253 00254 if(NULL== your_realloc /*|| NULL == *OldPtr || 00255 0==OldSize*/ 00256 ){ 00257 return edk_ArgumentException;//アホ引数入れるな!! 00258 } 00259 00260 ptr = your_realloc(*OldPtr,NewSize); 00261 if(NULL==ptr) return edk_FAILED; 00262 00263 //更新 00264 *OldPtr = NULL; 00265 *NewPtr = ptr; 00266 00267 return edk_SUCCEEDED; 00268 } |
|
dkcOSIndependent.c の 223 行で定義されています。 参照元 dkcMemoryStreamAutoExpandResize(), dkcQueueDynamicPush(), dkcReallocateAutoExpand(), と dkcStackDynamicPush().
00223 { 00224 //y=-25.43035 * pow(x,2) + 116.7214 00225 //y = -0.00000018 * pow(x,2) + 0.00019 00226 //y = -99.9999 * pow(OldSize,2) + 104857600; 00227 //y = 0.105263 * x * x + 10.52631 00228 //double x; 00229 // size_t size; 00230 if(OldSize <= 1024 * 5){//5KB以内なら2倍 00231 return OldSize * 2; 00232 }else if(OldSize >= 1024 * 1024 * 10 || 0==OldSize) 00233 {//10MB以上なら + ExpandSize 00234 return OldSize + ExpandSize; 00235 } 00236 //それ以外ならExpandSize * 3 00237 return OldSize + ExpandSize * 3; 00238 //return OldSize * 2;//ひでぇ関数だ。 00239 } |
|
endian change 16 bit version
dkcOSIndependent.c の 683 行で定義されています。 参照元 dkcStreamProcess16().
00683 {
00684 return (USHORT)((x >> 8) | (x << 8));
00685 }
|
|
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 の 691 行で定義されています。 参照先 dkcReverseEndian32(), DWORD, と ULONGLONG. 参照元 dkcStreamProcess64(), GetHeader(), HeaderWrite(), と ReverseEndianQWORD().
00691 { 00692 00693 return ( 00694 (ULONGLONG)dkcReverseEndian32((DWORD)(x & 0x00000000ffffffff)) << 32) 00695 | 00696 dkcReverseEndian32((DWORD)(x >> 32) 00697 ); 00698 00699 } |
|
dkcOSIndependent.c の 956 行で定義されています。 参照先 dkcRotateShiftRightMemoryLogic(), と NULL.
00956 { 00957 //size_t i = 0; 00958 void *pd = NULL; 00959 int r = edk_FAILED; 00960 00961 pd = malloc(num); 00962 if(NULL==pd){ 00963 return edk_OutOfMemory; 00964 } 00965 if(DKUTIL_SUCCEEDED(dkcRotateShiftRightMemoryLogic(d,size,num,pd,num))){ 00966 r = edk_SUCCEEDED; 00967 } 00968 00969 free(pd); 00970 00971 return r; 00972 00973 } |
|
dkcOSIndependent.c の 934 行で定義されています。 参照先 BYTE. 参照元 dkcRotateShiftRightMemory().
00935 { 00936 BYTE *dest = (BYTE *)d; 00937 size_t temp; 00938 00939 if(n > worksize){ 00940 return edk_FAILED; 00941 } 00942 for(;;){ 00943 if(n < size){ 00944 break; 00945 } 00946 n -= size; 00947 } 00948 temp = size - n; 00949 memcpy(workbuff,dest + temp,n); 00950 memmove(dest + n,dest,temp); 00951 memcpy(dest,workbuff,n); 00952 return edk_SUCCEEDED; 00953 00954 } |
|
fopenのファイル関数を使ってバイナリセーブを行う。 類似: dkcMemoryToFile()
dkcOSIndependent.c の 442 行で定義されています。 参照先 dkcSaveFile(). 参照元 dkcCircularStreamDump(), dkcFileCopyEx(), と dkcFreeSerialize().
00442 {//="wb" 00443 return dkcSaveFile(data,size,fname,"wb"); 00444 } |
|
fopenでテキストセーブを行う
dkcOSIndependent.c の 459 行で定義されています。 参照先 dkcSaveFile().
00459 { 00460 return dkcSaveFile(text,length,fname,"wt"); 00461 } |
|
いわいるセレクト(選択)アルゴリズム n:配列の再台数 k:調べたい番号(小さいうちから)
dkcOSIndependent.c の 741 行で定義されています。 参照先 DKC_COMPARE_TYPE, dkcSwapFast(), get_offset(), と NULL. 参照元 dkcSelectMax(), と dkcSelectMin().
00742 { 00743 00744 int i,j,left, right; 00745 00746 void *x = malloc(width); 00747 void *a = malloc(n * width); 00748 if(NULL==x || NULL==a){ 00749 return edk_ArgumentException; 00750 } 00751 if(n > INT_MAX){ 00752 return edk_FAILED; 00753 } 00754 00755 00756 memcpy(a,a_src,width * n); 00757 00758 00759 left = 0; right = n - 1; 00760 00761 while (left < right) 00762 { 00763 00764 memcpy(x, (const void *)get_offset(a,k * width),width); 00765 i = left; 00766 j = right; 00767 00768 for ( ; ; ) { 00769 00770 while( less(get_offset(a,i * width),x) > 0){ 00771 //while( *(int *)get_offset(a,i * width) < *(int *)x){ 00772 i++; 00773 } 00774 00775 while( less(x,get_offset(a,j * width)) > 0){ 00776 //while( *(int *)x < *(int *)get_offset(a,j * width) ){ 00777 j--; 00778 } 00779 00780 if (i > j){ 00781 break; 00782 } 00783 00784 00785 dkcSwapFast( 00786 get_offset(a,i * width), 00787 get_offset(a,j * width), 00788 width 00789 ); 00790 00791 i++; 00792 j--; 00793 } 00794 if (j < k){ 00795 left = i; 00796 } 00797 if (k < i){ 00798 right = j; 00799 } 00800 } 00801 00802 //ゲットする 00803 { 00804 //printf("%d",*(int *)get_offset(a,k * width)); 00805 00806 memcpy(dest,(const void *)get_offset(a,k * width),width); 00807 00808 } 00809 free(x); 00810 free(a); 00811 00812 return edk_SUCCEEDED; 00813 00814 } |
|
最大値を選択する
dkcOSIndependent.c の 817 行で定義されています。 参照先 DKC_COMPARE_TYPE, と dkcSelect().
00817 { 00818 if(n-1 > INT_MAX){ 00819 return edk_FAILED; 00820 } 00821 return dkcSelect(a,a_src,n,(int)n-1,width,less); 00822 } |
|
最小値を選択する
dkcOSIndependent.c の 823 行で定義されています。 参照先 DKC_COMPARE_TYPE, と dkcSelect().
00823 { 00824 return dkcSelect(a,a_src,n,(int)0,width,less); 00825 } |
|
演算でSwapさせる。SWAP_NUM()マクロを参照。 dkcOSIndependent.c の 552 行で定義されています。 参照先 dkcSwap64(), と ULONGLONG. 参照元 dkcBubbleSort(), dkcCombSort(), と dkcShellSort().
00553 { 00554 dkcSwap64((ULONGLONG *)p1,(ULONGLONG *)p2,size); 00555 } |
|
dkcOSIndependent.c の 517 行で定義されています。 参照元 dkcSwap().
00517 { 00518 size_t i; 00519 BYTE buf; 00520 size_t mod_ = size % sizeof(ULONGLONG); 00521 size_t cnt = size / sizeof(ULONGLONG); 00522 //char *tp1 = (char *)p1,*tp2 = (char *)p2; 00523 for(i=0;i<cnt;i++){ 00524 SWAP_NUM(p1[i],p2[i]); 00525 } 00526 for(i=0;i<mod_;i++){ 00527 00528 //SWAP_NUM((char)tp1[size - mod_ + 1],(char)tp2[size - mod_ + i]); 00529 /*a = b - a ;\ 00530 b -= a ;\ 00531 a += b 00532 */ 00533 /*( ( ((char *) p2)[size - mod_ + i])) 00534 = (char)( ( ((char *) p2)[size - mod_ + i])) - 00535 (char)( ( ((char *) p1)[size - mod_ + i])); 00536 00537 ( ( ((char *) p2)[size - mod_ + i])) -= ( ( ((char *) p1)[size - mod_ + i])); 00538 00539 ( ( ((char *) p1)[size - mod_ + i])) += ( ( ((char *) p2)[size - mod_ + i])); 00540 */ 00541 00542 00543 buf = (((BYTE *)p1)[size - mod_ + i]); 00544 (((BYTE *)p1)[size - mod_ + i]) = 00545 (((BYTE *)p2)[size - mod_ + i]) ; 00546 (((BYTE *)p2)[size - mod_ + i]) = buf; 00547 00548 } 00549 00550 } |
|
どんな方法でもいいからともかく速くSwapさせる。
dkcOSIndependent.c の 467 行で定義されています。 参照先 dkcmNOT_ASSERT, と NULL. 参照元 dkcSelect().
00468 { 00469 void *p = malloc(size); 00470 dkcmNOT_ASSERT(NULL==p); 00471 memcpy(p,p1,size); 00472 memcpy(p1,p2,size); 00473 memcpy(p2,p,size); 00474 free(p); 00475 } |
|
dkcOSIndependent.c の 559 行で定義されています。 参照先 ULONGLONG.
00559 { 00560 //*dest = (ULONGLONG)((high << 32) + low); 00561 *dest = (ULONGLONG)high << 32; 00562 *dest += low; 00563 //( high * MAXDWORD ) + low; 00564 } |
|
dkcOSIndependent.c の 581 行で定義されています。 参照先 LONGLONG.
00581 { 00582 //*dest = (ULONGLONG)((high << 32) + low); 00583 *dest = (LONGLONG)high << 32; 00584 *dest += low; 00585 00586 } |
|
dkcOSIndependent.c の 566 行で定義されています。 参照先 dkcmNOT_ASSERT, DWORD, と ULONGLONG.
00566 { 00567 DWORD *o = (DWORD *)&src; 00568 dkcmNOT_ASSERT(sizeof(DWORD) * 2 != sizeof(ULONGLONG)); 00569 //エンディアン問題をどうにかしよう! 00570 *dhigh = o[0]; 00571 *dlow = o[1]; 00572 } |