#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 }
|
1.3.6