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