メインページ | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcOSIndependent.h

説明を見る。
00001 
00007 #ifndef DKUTIL_C_OS_INDEPENDENT_H
00008 #define DKUTIL_C_OS_INDEPENDENT_H
00009 
00010 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
00011 #   pragma once
00012 
00013 #else
00014 
00015 #endif
00016 
00017 #ifdef __cplusplus //C++のみ
00018 
00019 #   include <limits>
00020 
00021 
00022 #endif
00023 
00024 
00025 #include "dkcDefined.h"
00026 #include <limits.h>
00027 #include <float.h>
00028 
00029 #if defined(_WIN32) || defined(__WIN32__)
00030 #   ifndef WIN32
00031 #       define WIN32
00032 #   endif
00033 #endif
00034 
00035 #if defined(_MSC_VER) || defined(WIN32)
00036     typedef unsigned __int64 QWORD;
00037 #else
00038     typedef unsigned long long QWORD;
00039 #endif
00040 
00042 typedef unsigned char dkctBOOL;
00043 
00044 
00045 
00046 #ifndef WIN32
00047 
00048 #ifndef ULONGLONG
00049 #   define ULONGLONG unsigned long long int
00050 #endif
00051 
00052 #ifndef LONGLONG
00053 #   define LONGLONG long long int
00054 #endif
00055 
00056 
00057 
00058 
00059 #ifndef TRUE
00060 #   define TRUE 1
00061 #endif
00062 #ifndef FALSE
00063 #   define FALSE 0
00064 #endif
00065 
00066 #ifndef NULL
00067 #   define NULL 0
00068 #endif
00069 
00070 #   define dkcdPATH_SEP '/'
00071 #   define dkcdPATH_SEP_STR "/"
00072 #   define dkcdPATH_LIST_SEP ':'
00073 #   define dkcdPATH_LIST_SEP_STR ":"
00074 #   define dkcmIS_PATH_SEP(c) (dkcdPATH_SEP==(c))
00075 /*.,:;*/
00076 #   define dkcmIS_INVALID_FILENAME_CHAR(c) ( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \
00077         || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') )
00078 
00079 #   define dkcmIS_INVALID_FOLDERNAME_CHAR(c) \
00080     dkcmIS_INVALID_FILENAME_CHAR(c)
00081 
00082 #define dkcmIS_INVALID_PATH_CHAR(c) \
00083     ( ( (c)=='\\') || ((c)=='*') || ((c)=='?') || ((c)== '"') || \
00084     ((c) == '<') || ((c) == '>') || ((c) == '|') )
00085 
00086 //reallocの関数の型
00087 typedef void *(*DKC_REALLOC_F_TYPE)(void *,size_t);
00088 
00089 typedef int BOOL;
00090 typedef unsigned char BYTE;
00091 
00092 
00093 
00094 //#error "I don't multithread define..."
00095 #if defined(_MT) || defined(__MT__)//MultiThread
00096 #   define dkcdMultiThread
00097 #endif
00098 
00099 #ifndef CALLBACK
00100 #   define CALLBACK
00101 #endif
00102 #ifndef WINAPI
00103 #   define WINAPI
00104 #endif
00105 
00106 #else //else of WIN32
00107 
00108 #ifdef _MSC_VER
00109 #   ifdef _DEBUG
00110 #       ifndef DEBUG
00111 #           define DEBUG
00112 #       endif
00113 #   else
00114 #       ifndef NDEBUG
00115 #           define NDEBUG
00116 #       endif
00117 #   endif
00118 
00119 #   pragma warning(disable:4115)//union{ } struct{ }
00120 #   pragma warning(disable:4100)//引数が関数の本体で 1 度も参照されません。
00121 #   pragma warning(disable:4206)//プリプロセス後のファイルが空です。 #if 0 #endif
00122 #   pragma warning(disable:4710)//場合によってはインライン処理を行いません。
00123 #   pragma warning(disable:4505)//参照されていないローカル関数は削除されました。
00124 #endif
00125 
00126 # include <windows.h>
00127 
00128 
00129 
00130 
00131 #   ifndef CALLBACK
00132 #       define CALLBACK __stdcall
00133 #   endif
00134 #   ifndef WINAPI
00135 #       define WINAPI __stdcall
00136 #   endif
00137 
00138 
00139 
00140 #   define dkcdPATH_SEP '\\'
00141 #   define dkcdPATH_SEP_STR "\\"
00142 #   define dkcdPATH_LIST_SEP ';'
00143 #   define dkcdPATH_LIST_SEP_STR ";"
00144 #   define dkcmIS_PATH_SEP(c) (dkcdPATH_SEP==(c) || '/'==(c))
00145 
00147 #   define dkcmIS_INVALID_FILENAME_CHAR(c) ( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \
00148         || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') || (':'== (c)) )
00149 
00150 #   define dkcmIS_INVALID_FOLDERNAME_CHAR(c) \
00151     dkcmIS_INVALID_FILENAME_CHAR(c)
00152 
00154 #   define dkcmIS_INVALID_PATH_CHAR(c) \
00155     ((c)=='*') || ((c)=='?') || ((c)== '"') || \
00156     ((c) == '<') || ((c) == '>') || ((c) == '|')
00157 
00158 #ifdef _MT
00159 #   define dkcdMultiThread 
00160 #endif
00161 
00162 #ifdef _MSC_VER
00163 #ifdef DEBUG
00164 #       pragma comment(linker,"/NODEFAULTLIB:LIBC")
00165 #       pragma comment(linker,"/NODEFAULTLIB:LIBCMT")
00166 #   ifdef dkcdMultiThread 
00167 #       pragma comment(linker,"/NODEFAULTLIB:LIBCD")
00168 #   else
00169 #       pragma comment(linker,"/NODEFAULTLIB:LIBCMTD")
00170 #   endif
00171 #else
00172 #       pragma comment(linker,"/NODEFAULTLIB:LIBCD")
00173 #       pragma comment(linker,"/NODEFAULTLIB:LIBCMTD")
00174 #   ifdef dkcdMultiThread 
00175 #       pragma comment(linker,"/NODEFAULTLIB:LIBC")
00176 #   else
00177 #       pragma comment(linker,"/NODEFAULTLIB:LIBCMT")
00178 #   endif
00179 #endif
00180 #endif //end of _MSC_VER
00181 
00182 #endif //end of  #ifndef WIN32
00183 
00184 
00185 
00186 #ifndef ULONGLONG_MAX
00187 #   define ULONGLONG_MAX DKINGYO_ULONGLONG_MAX
00188 #endif
00189 #ifndef LONGLONG_MAX
00190 #   define LONGLONG_MAX DKINGYO_LONGLONG_MAX
00191 #endif
00192 #ifndef LONGLONG_MIN
00193 #   define LONGLONG_MIN DKINGYO_LONGLONG_MIN
00194 #endif
00195 
00196 
00197 #ifdef WIN32
00198     //reallocの関数の型
00199     typedef void *(WINAPIV *DKC_REALLOC_F_TYPE)(void *,size_t);
00200 
00201 #else
00202 
00203     typedef void *(*DKC_REALLOC_F_TYPE)(void *,size_t);
00204 
00205 #endif
00206 
00207 
00208 
00209 #ifdef __BORLANDC__
00210 #   include <dir.h>
00211 #else
00212 #   include <direct.h>
00213 #endif
00214 
00215 
00216 #ifndef dkcdMAXPATH 
00217 #   if defined(PATH_MAX)
00218 #       define dkcdMAXPATH   PATH_MAX
00219 
00220 #   elif defined(MAX_PATH)
00221 #       define dkcdMAXPATH   MAX_PATH 
00222 
00223 #   elif  defined(_MAX_PATH)
00224 #       define dkcdMAXPATH   _MAX_PATH
00225 
00226 #   else
00227 #       define dkcdMAXPATH   1024
00228 
00229 #   endif
00230 #endif
00231 
00232 #ifndef dkcdMAXPATH_LEN
00233 #   define dkcdMAXPATH_LEN dkcdMAXPATH
00234 #endif
00235 
00236 /* 何事も例外を考えるのが大切だ。って事でbufferは普通の2倍取得する・・・。(オイ 
00237     追記:
00238     見事に予想は的中してバッファサイズは約2倍無いと危ない条件がある事が分かった。
00239     */
00240 
00241 
00242 #ifndef dkcdMAXPATH_BUFFER 
00243 
00244 #   define dkcdMAXPATH_BUFFER dkcdMAXPATH * 2
00245 #endif
00246 
00247 
00248 
00249 #ifndef MAYBE
00250 #   define MAYBE 2
00251 #endif
00252 
00253 typedef struct dkc_4char{
00254     signed char mode1,mode2,mode3,mode4;
00255 }DKC_4CHAR;
00256 
00257 
00258 
00259 
00260 #ifdef __cplusplus
00261 
00262 namespace dkutil{
00263 
00264 
00274 
00275 inline bool SaveBinary(const void *data,size_t size,const char *fname,const char *mode="wb"){//="wb"
00276     FILE *fp;
00277     fp = fopen( fname , mode ) ;//wb
00278     if(fp==NULL) return false;
00279     fwrite( data , size  , 1 , fp ) ;
00280     //fwrite( data , sizeof(size)  , 1 , fp ) ;
00281     fclose( fp ) ;
00282     return true;
00283 }
00284 
00292 
00293 inline bool LoadBinary(void *data,size_t size,const char *fname,const char *mode="rb" ){//="rb"
00294     FILE *fp ;
00295     fp = fopen( fname , mode ) ;//rb
00296     if(fp==NULL)return false;
00297     fread( data ,  size , 1 , fp ) ;
00298     //fread( data , sizeof(size)  , 1 , fp ) ;
00299     fclose( fp ) ;
00300     return true;
00301 }
00302 
00303 inline bool SaveText(const char *text,size_t length,const char *fname,const char *mode="wt"){
00304     return SaveBinary(text,length,fname,mode);
00305 }
00306 inline bool LoadText(char *text,size_t length,const char *fname,const char *mode="rt"){
00307     return LoadBinary(text,length,fname,mode);
00308 }
00309 
00310 
00311 
00312 }//end of dkutil namespace
00313 
00314 
00315 #else //for c lang
00316 
00317 
00318 #endif //end of __cplusplus
00319 
00321 DKC_EXTERN BOOL WINAPI dkcIsNativePathString(const char *s,size_t size);
00322 
00323 
00324 
00325 /*
00326 @param OldSize[in] 元のメモリ領域のサイズ
00327 @param ExpandSize[in] 足りないメモリ領域のサイズ
00328 @return 多分、理想系のサイズ?カナ?
00329 @note reallocする時の最適なメモリサイズを計算する。
00330 (内部実装はちょくちょく変わります。
00331 */
00332 
00333 DKC_EXTERN  size_t dkcReallocateSizeFunction(size_t OldSize,size_t ExpandSize);
00334 
00335 DKC_EXTERN  void* WINAPIV dkcAllocate(size_t size);
00336 
00337 DKC_EXTERN  int WINAPIV dkcFree(void **p);
00338 
00339 DKC_EXTERN  int WINAPI dkcReallocate(
00340     void **NewPtr,size_t NewSize,void **OldPtr
00341 );
00342 
00350 
00351 DKC_EXTERN int WINAPI dkcReallocateEx(
00352     DKC_REALLOC_F_TYPE your_realloc,void **NewPtr,size_t NewSize,
00353     void **OldPtr
00354 );
00355 
00365 DKC_EXTERN int WINAPI dkcReallocateAutoExpand(
00366     DKC_REALLOC_F_TYPE your_realloc,void **NewPtr,
00367     void **OldPtr,size_t OldSize,size_t *reallocated_size
00368 );
00369 
00373 DKC_EXTERN void WINAPI 
00374     dkcSwap(void *p1,void *p2,size_t size);
00381 DKC_EXTERN void WINAPI dkcSwapFast(void *p1,void *p2,size_t size);
00382 
00390 DKC_EXTERN void WINAPI dkcSwap64(ULONGLONG *p1,ULONGLONG *p2,size_t size);
00391 
00392 
00393 
00394 //#define dkcSwap(p1_,p2_,size) dkcSwap64(p1_,p2_,size)
00395 /*
00396 #define dkcSwapFast(p1,p2,size) dkcSwap64(p1,p2,size)
00397 */
00398 
00399 
00401 DKC_EXTERN BOOL dkcIs_foepn_mode(const char *s);
00403 DKC_EXTERN FILE * WINAPI dkcFOpen(const char *filename,const char *mode);
00405 DKC_EXTERN int WINAPI dkcFClose(FILE **ptr);
00406 
00408 DKC_EXTERN size_t WINAPI dkcFReadAll(void *,size_t size,FILE *fp);
00410 DKC_EXTERN size_t WINAPI dkcFWriteAll(void *,size_t size,FILE *fp);
00411 
00412 
00414 DKC_EXTERN int WINAPI dkcSaveBinary(const void *data,size_t size,const char *fname);
00415 
00417 DKC_EXTERN int WINAPI dkcLoadBinary(void *data,size_t size,const char *fname,size_t *readsize);
00419 DKC_EXTERN int WINAPI dkcSaveText(const char *text,size_t length,const char *fname);
00421 DKC_EXTERN int WINAPI dkcLoadText(char *text,size_t length,const char *fname,size_t *readsize);
00423 DKC_EXTERN BOOL WINAPI dkcCreateEmptyFile(const char *filename);
00424 
00425 
00426 DKC_EXTERN void WINAPI dkcTwoDWORDToULONGLONG(ULONGLONG *dest,DWORD high,DWORD low);
00427 
00428 DKC_EXTERN void WINAPI dkcULONGLONGToTwoDWORD(DWORD *dhigh,DWORD *dlow,ULONGLONG src);
00429 
00430 DKC_EXTERN void WINAPI dkcLONGLONGToTwoLONG(LONG *high,LONG *low,LONGLONG src);
00431 
00432 DKC_EXTERN void WINAPI dkcTwoLONGToLONGLONG(LONGLONG *dest,LONG high,LONG low);
00433 
00434 
00438 DKC_EXTERN int WINAPI dkcErrorMessage(const char *expression,
00439                                          const char *filename,size_t line,const char *message,...);
00440 
00441 
00442 
00443 #if defined(DEBUG) || defined(DKUTIL_DEBUG)
00444 #   define dkcmNOT_ASSERT(ex) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00445 #   define dkcmASSERT(ex) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00446 #   define dkcmNOT_ASSERT_MESSAGE(ex,mes) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00447 #   define dkcmASSERT_MESSAGE(ex,mes) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00448 #else
00449 #   define dkcmNOT_ASSERT_MESSAGE(ex,mes) ((void)0)
00450 #   define dkcmASSERT_MESSAGE(ex,mes) ((void)0)
00451 #   define dkcmNOT_ASSERT(ex) ((void)0)
00452 #   define dkcmASSERT(ex) ((void)0)
00453 #endif
00454 
00455 #   define dkcmFORCE_NOT_ASSERT(ex) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00456 #   define dkcmFORCE_ASSERT(ex) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00457 #   define dkcmFORCE_NOT_ASSERT_MESSAGE(ex,mes) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00458 #   define dkcmFORCE_ASSERT_MESSAGE(ex,mes) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00459 
00461 DKC_EXTERN const char *WINAPI dkcGetPathSep();
00462 
00463 DKC_EXTERN void WINAPI dkcCheckMemoryLeak(BOOL flag);
00465 DKC_EXTERN BOOL WINAPI dkcIsMMX();
00466 
00467 
00468 
00469 #define dkcmREVERSE_ENDIAN16(x) ( (USHORT)( (x >> 8) | (x << 8) ) )
00470 
00471 #define dkcmREVERSE_ENDIAN32(x) \
00472     ( (x << 24) | ( (x & 0x0000ff00) << 8) | ( (x & 0x00ff0000) >> 8 ) | (x >> 24) )
00473 
00474 #ifdef WIN32
00475 #   define dkcmREVERSE_ENDIAN64(x) (\
00476         (ULONGLONG)dkcReverseEndian32( (DWORD) (x & 0x00000000ffffffff) ) << 32 )\
00477         | \
00478         dkcReverseEndian32((DWORD)(x >> 32)\
00479     )
00480 #else
00481 #   define dkcmREVERSE_ENDIAN64(x) dkcReverseEndian64(x)
00482 
00483 
00484 #endif
00485 
00486 DKC_EXTERN ULONG dkcReverseEndian32(ULONG x);
00488 DKC_EXTERN ULONGLONG dkcReverseEndian64(ULONGLONG x);
00490 DKC_EXTERN USHORT dkcReverseEndian16(USHORT x);
00491 
00493 DKC_EXTERN BOOL dkcIsLittleEndian();
00495 #define dkcIsBigEndian() (!dkcIsLittleEndian())
00496 
00497 
00499 DKC_EXTERN BOOL dkcCheckOverflowULONG(ULONG a1,ULONG a2);
00500 
00501 
00502 
00503 
00504 typedef int (WINAPIV *DKC_COMPARE_TYPE)(const void *,const void *);
00505 
00529 
00530 DKC_EXTERN int WINAPI dkcSelect(void *dest,const void *a_src,size_t n,int k,size_t width ,DKC_COMPARE_TYPE comp);
00531 
00536 DKC_EXTERN int WINAPI dkcSelectMax(void *dest,const void *a, size_t n,size_t width ,DKC_COMPARE_TYPE comp);
00541 DKC_EXTERN int WINAPI dkcSelectMin(void *dest,const void *a, size_t n,size_t width ,DKC_COMPARE_TYPE comp);
00542 
00543 
00544 DKC_INLINE int dkcRotateShiftRightMemoryLogic(void *dest,size_t size,size_t n,void *workbuff,size_t worksize);
00545 
00546 
00547 DKC_EXTERN int WINAPI dkcRotateShiftRightMemory(void *dest,size_t size,size_t n);
00548 
00549 /*
00550 DKC_EXTERN void dkcSetAllocateMode(int flag);
00551 
00552 DKC_EXTERN void *dkcDebugAlloc
00553 */
00554 
00555 
00556 
00557 
00558 
00559 
00560 #endif //end of include once

dkutil_cに対してTue Oct 19 03:34:55 2004に生成されました。 doxygen 1.3.6