#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 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のファイル関数を使ってバイナリセーブを行う。 | |
| 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(), と dkcPushBackPathSep(). |
|
|
dkcOSIndependent.h の 71 行で定義されています。 |
|
|
big endianならTRUE
dkcOSIndependent.h の 499 行で定義されています。 |
|
|
dkcOSIndependent.h の 456 行で定義されています。 |
|
|
dkcOSIndependent.h の 454 行で定義されています。 |
|
|
dkcOSIndependent.h の 460 行で定義されています。 |
|
|
dkcOSIndependent.h の 462 行で定義されています。 |
|
|
|
dkcOSIndependent.h の 461 行で定義されています。 |
|
|
値: ( ((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 の 453 行で定義されています。 参照元 dkcCreateDirectory(). |
|
|
dkcOSIndependent.h の 473 行で定義されています。 |
|
|
dkcOSIndependent.h の 475 行で定義されています。 |
|
|
dkcOSIndependent.h の 485 行で定義されています。 |
|
|
|
dkcOSIndependent.h の 53 行で定義されています。 |
|
|
dkcOSIndependent.h の 190 行で定義されています。 |
|
|
dkcOSIndependent.h の 193 行で定義されています。 |
|
|
dkcOSIndependent.h の 250 行で定義されています。 |
|
|
|
|
|
dkcOSIndependent.h の 187 行で定義されています。 |
|
|
|
|
|
|
|
dkcOSIndependent.h の 508 行で定義されています。 参照元 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 の 120 行で定義されています。 参照先 DKC_INLINE. 参照元 alloc_sop_node(), dkcAllocateFill(), と dkcSameObjectPoolReserve().
00120 {
00121 return malloc(size);
00122 }
|
|
||||||||||||
|
dkcOSIndependent.c の 114 行で定義されています。 参照先 BYTE, DKC_INLINE, dkcAllocateFast(), と NULL. 参照元 alloc_sameobjectpool(), と dkcAllocate().
00114 {
00115 void *p = dkcAllocateFast(size);
00116 if(NULL==p) return NULL;
00117 memset(p,fill,size);
00118 return p;
00119 }
|
|
|
dkcOSIndependent.c の 583 行で定義されています。 参照先 BOOL.
00583 {
00584
00585 }
|
|
||||||||||||
|
unsigned long型の二つの整数をプラスしたらオーバーフローするかどうかをチェックする。
dkcOSIndependent.c の 658 行で定義されています。 参照先 BOOL, DKC_INLINE, FALSE, SWAP_NUM, と TRUE. 参照元 dkcMemoryStreamAdapterPushBack(), と dkcRLEPackBitsEncode().
|
|
|
空ファイルを作る。
dkcOSIndependent.c の 399 行で定義されています。 参照先 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 Sleep(800);
00072 }
00073 }
00074 ShellExecute(NULL, "open",name, NULL, NULL, SW_SHOWNORMAL);
00075 //Sleep(1000);
00076 //DeleteFile(name);
00077 }
00078 MB("このテキストをこのソフトの開発者に渡せば、バグ発見の近道なります。\n \
00079 開発者に知らせるときはこのテキストを転記してあげましょう。");
00080 if(IDYES==MessageBox(NULL,
00081 "このままこのソフトを起動しつづけると、更なるエラーが発生する可能性があります。\n終了しますか?",
00082 "あってはいけない エラー!!!",
00083 MB_YESNO))
00084 {
00085 exit(edk_FAILED);
00086 //terminate();
00087 }else{
00088 }
00089 # else //else of win32
00090
00091 fprintf(stderr,ss);
00092 exit(edk_FAILED);
00093
00094 # endif //end of win32
00095
00096 #else //debug
00097
00098 # ifdef WIN32
00099 ODS(ss);
00100 fprintf(stderr,ss);
00101 //_CrtDebugBreak();
00102 DebugBreak();
00103 # else //else of win32
00104
00105 fprintf(stderr,ss);
00106 Debugger();
00107
00108 # endif //end of win32
00109 #endif//end of NDEBUG
00110 //assert(ss);
00111
00112 return TRUE;
00113 }
|
|
|
fcloseのラッパー
dkcOSIndependent.c の 299 行で定義されています。 参照先 DKC_EXTERN, edk_ArgumentException, edk_SUCCEEDED, と NULL. 参照元 dkcDeleteCircularStream(), dkcFileCopyEx(), dkcFreeStream(), と GetHeader().
00299 {
00300 if(NULL==ptr || NULL==*ptr) return edk_ArgumentException;
00301 fclose(*ptr);
00302 *ptr = NULL;
00303 return edk_SUCCEEDED;
00304 }
|
|
||||||||||||
|
fopenのラッパー
dkcOSIndependent.c の 295 行で定義されています。 参照先 DKC_EXTERN. 参照元 dkcAllocStream(), dkcFileCopyEx(), dkcNewCircularStreamForFile(), と GetHeader().
00295 {
00296 return fopen(filename,mode);
00297 }
|
|
||||||||||||||||
|
freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror)
dkcOSIndependent.c の 305 行で定義されています。 参照先 BYTE, DKC_EXTERN, と dkcmNOT_ASSERT. 参照元 GetHeader().
00306 {
00307 size_t count;
00308 size_t tc,tsize;
00309 BYTE *tbuffer;
00310
00311 //read size
00312 tsize = size;
00313 //temp variable
00314 tc = 0;
00315 //offset counter
00316 count = 0;
00317 //byte type pointer
00318 tbuffer = (BYTE *)buffer;
00319 for(;;)
00320 {
00321 //error check
00322 if(ferror(fp) ){
00323 break;
00324 }
00325 if(feof(fp)){
00326 break;
00327 }
00328 //read
00329 tc = fread(&tbuffer[count],1,tsize,fp);
00330 //update
00331 tsize -= tc;
00332 count += tc;
00333
00334 if(count == size){
00335 break;
00336 }
00337 # ifdef DEBUG
00338 //ありえないエラーチェック
00339 dkcmNOT_ASSERT(count > size);
00340 # else
00341 if(count > size){
00342 break;
00343 }
00344 # endif
00345 }
00346 return count;
00347 }
|
|
|
||||||||||||||||
|
dkcFReadAll() dkcFReadAllのfwrite版
dkcOSIndependent.c の 349 行で定義されています。 参照先 BYTE, DKC_EXTERN, と dkcmNOT_ASSERT.
00349 {
00350 size_t count;
00351 size_t tc,tsize;
00352 BYTE *tbuffer;
00353
00354 //read size
00355 tsize = size;
00356 //temp variable
00357 tc = 0;
00358 //offset counter
00359 count = 0;
00360 //byte type pointer
00361 tbuffer = (BYTE *)buffer;
00362 for(;;)
00363 {
00364 //error check
00365 if(ferror(fp) ){
00366 break;
00367 }
00368 if(feof(fp)){
00369 break;
00370 }
00371 //read
00372 tc = fwrite(&tbuffer[count],1,tsize,fp);
00373 //update
00374 tsize -= tc;
00375 count += tc;
00376
00377 if(count == size){
00378 break;
00379 }
00380 # ifdef DEBUG
00381 //ありえないエラーチェック
00382 dkcmNOT_ASSERT(count > size);
00383 # else
00384 if(count > size){
00385 break;
00386 }
00387 # endif
00388 }
00389 return count;
00390
00391 }
|
|
|
path separatorの入った文字列(1byte毎にpath separatorの文字定数が入っている)をゲット
dkcOSIndependent.c の 588 行で定義されています。 参照先 dkcdPATH_SEP. 参照元 dkcSJIS_SearchPathSep(), と dkcSJIS_SearchPathSepLast().
00588 {
00589 #ifdef WIN32
00590 static char target[3]={dkcdPATH_SEP,'/','\0'};
00591 #else
00592 static char target[3]={dkcdPATH_SEP,'\0'};
00593 #endif
00594 return target;
00595 }
|
|
|
fopenの時の第二引数が有効な値かどうか調べる。
dkcOSIndependent.c の 139 行で定義されています。
00139 {
00140 /* wrtb+ */
00141 const char *ms= "wrtb+";
00142 size_t slen = strlen(s);
00143 size_t mslen = strlen(ms);
00144 size_t i,j;
00145 int flag = FALSE;
00146 for(i=0;i<slen;i++){
00147 for(j=0;j<mslen;j++){
00148 if(ms[j]==s[i]){
00149 flag = TRUE;
00150 break;
00151 }
00152 }
00153 if(TRUE!=flag){
00154 return FALSE;
00155 }else{
00156 flag = FALSE;
00157 }
00158 }
00159 return TRUE;
00160 }
|
|
|
little endian ならTRUE
dkcOSIndependent.c の 652 行で定義されています。 参照先 BOOL, と DKC_INLINE. 参照元 dkcOpenFileWithSignature(), GetHeader(), HeaderWrite(), と SetStreamInfo().
00652 {
00653 int x=1;
00654 return (BOOL)((*(char*)&x));
00655 }
|
|
|
MMXが使えるならTRUE.
dkcOSIndependent.c の 629 行で定義されています。 参照元 CheckMMX().
00629 {
00630 return FALSE;
00631 }
|
|
||||||||||||
|
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 の 408 行で定義されています。 参照先 dkcLoadFile(). 参照元 dkcAllocDeserialize(), と dkcFileCopyEx().
00408 {//="rb"
00409 return dkcLoadFile(data,size,fname,"rb",readsize);
00410 }
|
|
||||||||||||||||||||
|
テキストデータをメモリに読み込む。dkcSaveText()と対
dkcOSIndependent.c の 415 行で定義されています。 参照先 dkcLoadFile().
00415 {
00416 return dkcLoadFile(text,length,fname,"rt",readsize);
00417 }
|
|
||||||||||||||||
|
dkcOSIndependent.c の 526 行で定義されています。 参照先 DKC_INLINE, dkcmNOT_ASSERT, と LONGLONG.
00526 {
00527 LONG *o = (LONG *)&src;
00528 dkcmNOT_ASSERT(sizeof(LONG) * 2 != sizeof(LONGLONG));
00529 *high = o[0];
00530 *low = o[1];
00531 }
|
|
||||||||||||||||
|
dkcOSIndependent.c の 194 行で定義されています。 参照先 dkcReallocateEx(). 参照元 dkcBufferResize(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamResize(), dkcQueueDynamicPush(), dkcSingleListSetBuffer(), と dkcStackDynamicPush().
00196 {
00197 return dkcReallocateEx(realloc,NewPtr,NewSize,OldPtr);
00198 }
|
|
||||||||||||||||||||||||
|
dkcOSIndependent.c の 225 行で定義されています。 参照先 DKC_REALLOC_F_TYPE, dkcReallocateSizeFunction(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, と NULL.
00229 {
00230 void *ptr = NULL;
00231 size_t want_size = OldSize / 8;
00232 size_t ra_size = dkcReallocateSizeFunction(OldSize,
00233 (want_size <= 20) ? 20 : want_size
00234 );
00235 size_t div = 8;
00236 size_t tmp_ra = ra_size / div;
00237 size_t i;
00238 if(NULL== your_realloc /*|| NULL==*NewPtr*/ || NULL == *OldPtr ||
00239 0==OldSize || NULL==reallocated_size
00240 ){
00241 return edk_ArgumentException;//アホ引数入れるな!!
00242 }
00243
00244 for(i=0;i<div;i++){
00245 ptr = your_realloc(*OldPtr,ra_size);
00246 if(NULL==ptr){
00247 if(OldSize > (ra_size -= tmp_ra)){//とりあえずtmp_ra分を引く。
00248 break;//こら望みなしだわ
00249 }
00250 continue;
00251 }else{
00252 break;
00253 }
00254 }
00255 if(NULL==ptr) return edk_FAILED;
00256
00257 //更新
00258 *NewPtr = ptr;
00259 *OldPtr = NULL;
00260
00261 *reallocated_size = ra_size;
00262
00263 return edk_SUCCEEDED;
00264 }
|
|
||||||||||||||||||||
|
edk_SUCCEEDEDだったら成功
dkcOSIndependent.c の 200 行で定義されています。 参照先 DKC_REALLOC_F_TYPE, edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcReallocate().
00204 {
00205 void *ptr = NULL;
00206
00207 if(NULL== your_realloc /*|| NULL == *OldPtr ||
00208 0==OldSize*/
00209 ){
00210 return edk_ArgumentException;//アホ引数入れるな!!
00211 }
00212
00213 ptr = your_realloc(*OldPtr,NewSize);
00214 if(NULL==ptr) return edk_FAILED;
00215
00216 //更新
00217 *OldPtr = NULL;
00218 *NewPtr = ptr;
00219
00220 return edk_SUCCEEDED;
00221 }
|
|
||||||||||||
|
dkcOSIndependent.c の 176 行で定義されています。 参照元 dkcMemoryStreamAutoExpandResize(), dkcQueueDynamicPush(), dkcReallocateAutoExpand(), と dkcStackDynamicPush().
00176 {
00177 //y=-25.43035 * pow(x,2) + 116.7214
00178 //y = -0.00000018 * pow(x,2) + 0.00019
00179 //y = -99.9999 * pow(OldSize,2) + 104857600;
00180 //y = 0.105263 * x * x + 10.52631
00181 //double x;
00182 // size_t size;
00183 if(OldSize <= 1024 * 5){//5KB以内なら2倍
00184 return OldSize * 2;
00185 }else if(OldSize >= 1024 * 1024 * 10 || 0==OldSize)
00186 {//10MB以上なら + ExpandSize
00187 return OldSize + ExpandSize;
00188 }
00189 //それ以外ならExpandSize * 3
00190 return OldSize + ExpandSize * 3;
00191 //return OldSize * 2;//ひでぇ関数だ。
00192 }
|
|
|
endian change 16 bit version
dkcOSIndependent.c の 635 行で定義されています。 参照先 DKC_INLINE. 参照元 dkcStreamProcess16().
00635 {
00636 return (USHORT)((x >> 8) | (x << 8));
00637 }
|
|
|
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 の 643 行で定義されています。 参照先 DKC_INLINE, dkcReverseEndian32(), DWORD, と ULONGLONG. 参照元 dkcStreamProcess64(), GetHeader(), HeaderWrite(), と ReverseEndianQWORD().
00643 {
00644
00645 return (
00646 (ULONGLONG)dkcReverseEndian32((DWORD)(x & 0x00000000ffffffff)) << 32)
00647 |
00648 dkcReverseEndian32((DWORD)(x >> 32)
00649 );
00650
00651 }
|
|
||||||||||||||||
|
dkcOSIndependent.c の 900 行で定義されています。 参照先 dkcRotateShiftRightMemoryLogic(), DKUTIL_SUCCEEDED, edk_FAILED, edk_OutOfMemory, edk_SUCCEEDED, と NULL.
00900 {
00901 //size_t i = 0;
00902 void *pd = NULL;
00903 int r = edk_FAILED;
00904
00905 pd = malloc(num);
00906 if(NULL==pd){
00907 return edk_OutOfMemory;
00908 }
00909 if(DKUTIL_SUCCEEDED(dkcRotateShiftRightMemoryLogic(d,size,num,pd,num))){
00910 r = edk_SUCCEEDED;
00911 }
00912
00913 free(pd);
00914
00915 return r;
00916
00917 } |
|
||||||||||||||||||||||||
|
dkcOSIndependent.c の 878 行で定義されています。 参照先 BYTE, DKC_INLINE, edk_FAILED, と edk_SUCCEEDED. 参照元 dkcRotateShiftRightMemory().
00879 {
00880 BYTE *dest = (BYTE *)d;
00881 size_t temp;
00882
00883 if(n > worksize){
00884 return edk_FAILED;
00885 }
00886 for(;;){
00887 if(n < size){
00888 break;
00889 }
00890 n -= size;
00891 }
00892 temp = size - n;
00893 memcpy(workbuff,dest + temp,n);
00894 memmove(dest + n,dest,temp);
00895 memcpy(dest,workbuff,n);
00896 return edk_SUCCEEDED;
00897
00898 }
|
|
||||||||||||||||
|
fopenのファイル関数を使ってバイナリセーブを行う。
dkcOSIndependent.c の 395 行で定義されています。 参照先 dkcSaveFile(). 参照元 dkcCircularStreamDump(), dkcFileCopyEx(), と dkcFreeSerialize().
00395 {//="wb"
00396 return dkcSaveFile(data,size,fname,"wb");
00397 }
|
|
||||||||||||||||
|
fopenでテキストセーブを行う
dkcOSIndependent.c の 412 行で定義されています。 参照先 dkcSaveFile().
00412 {
00413 return dkcSaveFile(text,length,fname,"wt");
00414 }
|
|
||||||||||||||||||||||||||||
|
いわいるセレクト(選択)アルゴリズム n:配列の再台数 k:調べたい番号(小さいうちから)
dkcOSIndependent.c の 685 行で定義されています。 参照先 DKC_COMPARE_TYPE, dkcSwapFast(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, get_offset(), と NULL. 参照元 dkcSelectMax(), と dkcSelectMin().
00686 {
00687
00688 int i,j,left, right;
00689
00690 void *x = malloc(width);
00691 void *a = malloc(n * width);
00692 if(NULL==x || NULL==a){
00693 return edk_ArgumentException;
00694 }
00695 if(n > INT_MAX){
00696 return edk_FAILED;
00697 }
00698
00699
00700 memcpy(a,a_src,width * n);
00701
00702
00703 left = 0; right = n - 1;
00704
00705 while (left < right)
00706 {
00707
00708 memcpy(x, (const void *)get_offset(a,k * width),width);
00709 i = left;
00710 j = right;
00711
00712 for ( ; ; ) {
00713
00714 while( less(get_offset(a,i * width),x) > 0){
00715 //while( *(int *)get_offset(a,i * width) < *(int *)x){
00716 i++;
00717 }
00718
00719 while( less(x,get_offset(a,j * width)) > 0){
00720 //while( *(int *)x < *(int *)get_offset(a,j * width) ){
00721 j--;
00722 }
00723
00724 if (i > j){
00725 break;
00726 }
00727
00728
00729 dkcSwapFast(
00730 get_offset(a,i * width),
00731 get_offset(a,j * width),
00732 width
00733 );
00734
00735 i++;
00736 j--;
00737 }
00738 if (j < k){
00739 left = i;
00740 }
00741 if (k < i){
00742 right = j;
00743 }
00744 }
00745
00746 //ゲットする
00747 {
00748 //printf("%d",*(int *)get_offset(a,k * width));
00749
00750 memcpy(dest,(const void *)get_offset(a,k * width),width);
00751
00752 }
00753 free(x);
00754 free(a);
00755
00756 return edk_SUCCEEDED;
00757
00758 }
|
|
||||||||||||||||||||||||
|
最大値を選択する
dkcOSIndependent.c の 761 行で定義されています。 参照先 DKC_COMPARE_TYPE, DKC_INLINE, dkcSelect(), と edk_FAILED.
00761 {
00762 if(n-1 > INT_MAX){
00763 return edk_FAILED;
00764 }
00765 return dkcSelect(a,a_src,n,(int)n-1,width,less);
00766 }
|
|
||||||||||||||||||||||||
|
最小値を選択する
dkcOSIndependent.c の 767 行で定義されています。 参照先 DKC_COMPARE_TYPE, DKC_INLINE, と dkcSelect().
00767 {
00768 return dkcSelect(a,a_src,n,(int)0,width,less);
00769 }
|
|
||||||||||||||||
|
演算でSwapさせる。SWAP_NUM()マクロを参照。 dkcOSIndependent.c の 504 行で定義されています。 参照先 dkcSwap64(), と ULONGLONG. 参照元 dkcBubbleSort(), dkcCombSort(), と dkcShellSort().
00505 {
00506 dkcSwap64((ULONGLONG *)p1,(ULONGLONG *)p2,size);
00507 }
|
|
||||||||||||||||
|
dkcOSIndependent.c の 469 行で定義されています。 参照先 BYTE, SWAP_NUM, と ULONGLONG. 参照元 dkcSwap().
00469 {
00470 size_t i;
00471 BYTE buf;
00472 size_t mod_ = size % sizeof(ULONGLONG);
00473 size_t cnt = size / sizeof(ULONGLONG);
00474 //char *tp1 = (char *)p1,*tp2 = (char *)p2;
00475 for(i=0;i<cnt;i++){
00476 SWAP_NUM(p1[i],p2[i]);
00477 }
00478 for(i=0;i<mod_;i++){
00479
00480 //SWAP_NUM((char)tp1[size - mod_ + 1],(char)tp2[size - mod_ + i]);
00481 /*a = b - a ;\
00482 b -= a ;\
00483 a += b
00484 */
00485 /*( ( ((char *) p2)[size - mod_ + i]))
00486 = (char)( ( ((char *) p2)[size - mod_ + i])) -
00487 (char)( ( ((char *) p1)[size - mod_ + i]));
00488
00489 ( ( ((char *) p2)[size - mod_ + i])) -= ( ( ((char *) p1)[size - mod_ + i]));
00490
00491 ( ( ((char *) p1)[size - mod_ + i])) += ( ( ((char *) p2)[size - mod_ + i]));
00492 */
00493
00494
00495 buf = (((BYTE *)p1)[size - mod_ + i]);
00496 (((BYTE *)p1)[size - mod_ + i]) =
00497 (((BYTE *)p2)[size - mod_ + i]) ;
00498 (((BYTE *)p2)[size - mod_ + i]) = buf;
00499
00500 }
00501
00502 }
|
|
||||||||||||||||
|
どんな方法でもいいからともかく速くSwapさせる。
dkcOSIndependent.c の 419 行で定義されています。 参照先 dkcmNOT_ASSERT, と NULL. 参照元 dkcSelect().
00420 {
00421 void *p = malloc(size);
00422 dkcmNOT_ASSERT(NULL==p);
00423 memcpy(p,p1,size);
00424 memcpy(p1,p2,size);
00425 memcpy(p2,p,size);
00426 free(p);
00427 }
|
|
||||||||||||||||
|
dkcOSIndependent.c の 511 行で定義されています。 参照先 DKC_INLINE, と ULONGLONG.
00511 {
00512 //*dest = (ULONGLONG)((high << 32) + low);
00513 *dest = (ULONGLONG)high << 32;
00514 *dest += low;
00515 //( high * MAXDWORD ) + low;
00516 }
|
|
||||||||||||||||
|
dkcOSIndependent.c の 533 行で定義されています。 参照先 DKC_INLINE, と LONGLONG.
00533 {
00534 //*dest = (ULONGLONG)((high << 32) + low);
00535 *dest = (LONGLONG)high << 32;
00536 *dest += low;
00537
00538 }
|
|
||||||||||||||||
|
dkcOSIndependent.c の 518 行で定義されています。 参照先 DKC_INLINE, dkcmNOT_ASSERT, DWORD, と ULONGLONG.
00518 {
00519 DWORD *o = (DWORD *)&src;
00520 dkcmNOT_ASSERT(sizeof(DWORD) * 2 != sizeof(ULONGLONG));
00521 //エンディアン問題をどうにかしよう!
00522 *dhigh = o[0];
00523 *dlow = o[1];
00524 }
|
1.3.6