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

dkcOSIndependent.h

説明を見る。
00001 
00007 #ifndef dkutil_c_OSIndependent__h
00008 #define dkutil_c_OSIndependent__h
00009 
00010 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
00011 #   pragma once
00012 
00013 #else
00014 
00015 #endif
00016 
00017 
00018 #include "dkcDefined.h"
00019 #include <limits.h>
00020 
00021 
00022 #if defined(_MSC_VER) || defined(WIN32)
00023 typedef unsigned __int64 QWORD;
00024 #else
00025 typedef unsigned long long QWORD;
00026 #endif
00027 
00028 
00029 #ifndef WIN32
00030 
00031 #ifndef ULONGLONG
00032 #   define ULONGLONG unsigned long long int
00033 #endif
00034 
00035 #ifndef LONGLONG
00036 #   define LONGLONG long long int
00037 #endif
00038 
00039 
00040 #ifndef ULONGLONG_MAX
00041 #   define ULONGLONG_MAX DKINGYO_ULONGLONG_MAX
00042 #endif
00043 #ifndef LONGLONG_MAX
00044 #   define LONGLONG_MAX DKINGYO_LONGLONG_MAX
00045 #endif
00046 #ifndef LONGLONG_MIN
00047 #   define LONGLONG_MIN DKINGYO_LONGLONG_MIN
00048 #endif
00049 
00050 #ifndef TRUE
00051 #   define TRUE 1
00052 #endif
00053 #ifndef FALSE
00054 #   define FALSE 0
00055 #endif
00056 
00057 #ifndef NULL
00058 #   define NULL 0
00059 #endif
00060 
00061 #   define dkcdPATH_SEP '/'
00062 #   define dkcdPATH_SEP_STR "/"
00063 #   define dkcdPATH_LIST_SEP ':'
00064 #   define dkcdPATH_LIST_SEP_STR ":"
00065 #   define dkcmIS_PATH_SEP(c) (dkcdPATH_SEP==(c))
00066 /*.,:;*/
00067 #   define dkcmIS_INVALID_FILENAME_CHAR(c) ( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \
00068         || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') )
00069 
00070 #   define dkcmIS_INVALID_FOLDERNAME_CHAR(c) \
00071     dkcmIS_INVALID_FILENAME_CHAR(c)
00072 
00073 #define dkcmIS_INVALID_PATH_CHAR(c) \
00074     ( ( (c)=='\\') || ((c)=='*') || ((c)=='?') || ((c)== '"') || \
00075     ((c) == '<') || ((c) == '>') || ((c) == '|') )
00076 
00077 //reallocの関数の型
00078 typedef void *(*DKC_REALLOC_F_TYPE)(void *,size_t);
00079 
00080 typedef int BOOL;
00081 typedef unsigned char BYTE;
00082 
00083 
00084 
00085 //#error "I don't multithread define..."
00086 #ifdef _MT//MultiThread
00087 #   define dkcdMultiThread
00088 #endif
00089 
00090 #ifndef CALLBACK
00091 #   define CALLBACK
00092 #endif
00093 #ifndef WINAPI
00094 #   define WINAPI
00095 #endif
00096 
00097 #else 
00098 
00099 #ifdef _MSC_VER
00100 #   ifdef _DEBUG
00101 #       ifndef DEBUG
00102 #           define DEBUG
00103 #       endif
00104 #   else
00105 #       ifndef NDEBUG
00106 #           define NDEBUG
00107 #       endif
00108 #   endif
00109 
00110 #   pragma warning(disable:4115)//union{ } struct{ }
00111 #   pragma warning(disable:4100)//引数が関数の本体で 1 度も参照されません。
00112 #   pragma warning(disable:4206)//プリプロセス後のファイルが空です。 #if 0 #endif
00113 #   pragma warning(disable:4710)//場合によってはインライン処理を行いません。
00114 #   pragma warning(disable:4505)//参照されていないローカル関数は削除されました。
00115 #endif
00116 
00117 # include <windows.h>
00118 
00119 
00120 
00121 
00122 
00123 #   ifndef CALLBACK
00124 #       define CALLBACK __stdcall
00125 #   endif
00126 #   ifndef WINAPI
00127 #       define WINAPI __stdcall
00128 #   endif
00129 
00130 
00131 
00132 #   define dkcdPATH_SEP '\\'
00133 #   define dkcdPATH_SEP_STR "\\"
00134 #   define dkcdPATH_LIST_SEP ';'
00135 #   define dkcdPATH_LIST_SEP_STR ";"
00136 #   define dkcmIS_PATH_SEP(c) (dkcdPATH_SEP==(c) || '/'==(c))
00137 
00139 #   define dkcmIS_INVALID_FILENAME_CHAR(c) ( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \
00140         || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') || (':'== (c)) )
00141 
00142 #   define dkcmIS_INVALID_FOLDERNAME_CHAR(c) \
00143     dkcmIS_INVALID_FILENAME_CHAR(c)
00144 
00146 #   define dkcmIS_INVALID_PATH_CHAR(c) \
00147     ((c)=='*') || ((c)=='?') || ((c)== '"') || \
00148     ((c) == '<') || ((c) == '>') || ((c) == '|')
00149 
00150 #ifdef _MT
00151 #   define dkcdMultiThread 
00152 #endif
00153 
00154 #ifdef _MSC_VER
00155 #ifdef DEBUG
00156 #       pragma comment(linker,"/NODEFAULTLIB:LIBC")
00157 #       pragma comment(linker,"/NODEFAULTLIB:LIBCMT")
00158 #   ifdef dkcdMultiThread 
00159 #       pragma comment(linker,"/NODEFAULTLIB:LIBCD")
00160 #   else
00161 #       pragma comment(linker,"/NODEFAULTLIB:LIBCMTD")
00162 #   endif
00163 #else
00164 #       pragma comment(linker,"/NODEFAULTLIB:LIBCD")
00165 #       pragma comment(linker,"/NODEFAULTLIB:LIBCMTD")
00166 #   ifdef dkcdMultiThread 
00167 #       pragma comment(linker,"/NODEFAULTLIB:LIBC")
00168 #   else
00169 #       pragma comment(linker,"/NODEFAULTLIB:LIBCMT")
00170 #   endif
00171 #endif
00172 #endif //end of _MSC_VER
00173 
00174 #endif //end of  #ifndef WIN32
00175 
00176 
00177 #ifdef WIN32
00178     //reallocの関数の型
00179     typedef void *(WINAPIV *DKC_REALLOC_F_TYPE)(void *,size_t);
00180 
00181 #else
00182 
00183     typedef void *(*DKC_REALLOC_F_TYPE)(void *,size_t);
00184 
00185 #endif
00186 
00187 #ifndef DKC_INLINE
00188 #   if _MSC_VER >= 1100
00189 #       define DKC_INLINE _inline
00190 #   elif defined(__inline)
00191 #       define DKC_INLINE __inline
00192 #   else
00193 #       define DKC_INLINE
00194 #   endif
00195 #endif
00196 
00197 #ifdef WIN32
00198 #   define DKC_EXPORT __declspec(dllexport)
00199 #   define DKC_IMPORT __declspec(dllimport)
00200 #   ifdef USE_DKCDLL
00201 #       ifdef DKCDLL_EXPORTS
00202 #           define DKC_EXTERN DKUTIL_EXTERN DKC_EXPORT
00203 #       else
00204 #           define DKC_EXTERN DKUTIL_EXTERN DKC_INPORT
00205 #       endif
00206 #   else
00207 #       ifdef _MSC_VER
00208 #           define DKC_EXTERN DKUTIL_EXTERN DKC_INLINE
00209 #       else
00210 #           define DKC_EXTERN DKUTIL_EXTERN
00211 #       endif
00212 #   endif
00213 #else
00214 #   define DKC_EXPORT
00215 #   define DKC_IMPORT
00216 #   define DKC_EXTERN DKUTIL_EXTERN
00217 #endif
00218 
00219 
00220 #ifdef __BORLANDC__
00221 #   include <dir.h>
00222 #else
00223 #   include <direct.h>
00224 #endif
00225 
00226 
00227 #ifndef dkcdMAXPATH 
00228 #   if defined(PATH_MAX)
00229 #       define dkcdMAXPATH   PATH_MAX
00230 
00231 #   elif defined(MAX_PATH)
00232 #       define dkcdMAXPATH   MAX_PATH 
00233 
00234 #   elif  defined(_MAX_PATH)
00235 #       define dkcdMAXPATH   _MAX_PATH
00236 
00237 #   else
00238 #       define dkcdMAXPATH   1024
00239 
00240 #   endif
00241 #endif
00242 
00243 #ifndef dkcdMAXPATH_LEN
00244 #   define dkcdMAXPATH_LEN dkcdMAXPATH
00245 #endif
00246 
00247 /* 何事も例外を考えるのが大切だ。って事でbufferは普通の2倍取得する・・・。(オイ 
00248     追記:
00249     見事に予想は的中してバッファサイズは約2倍無いと危ない条件がある事が分かった。
00250     */
00251 
00252 
00253 #ifndef dkcdMAXPATH_BUFFER 
00254 
00255 #   define dkcdMAXPATH_BUFFER dkcdMAXPATH * 2
00256 #endif
00257 
00258 
00259 
00260 #ifndef MAYBE
00261 #   define MAYBE 2
00262 #endif
00263 
00264 typedef struct dkc_4char{
00265     signed char mode1,mode2,mode3,mode4;
00266 }DKC_4CHAR;
00267 
00268 
00269 
00270 
00271 #ifdef __cplusplus
00272 
00273 namespace dkutil{
00274 
00275 
00285 
00286 inline bool SaveBinary(const void *data,size_t size,const char *fname,const char *mode="wb"){//="wb"
00287     FILE *fp;
00288     fp = fopen( fname , mode ) ;//wb
00289     if(fp==NULL) return false;
00290     fwrite( data , size  , 1 , fp ) ;
00291     //fwrite( data , sizeof(size)  , 1 , fp ) ;
00292     fclose( fp ) ;
00293     return true;
00294 }
00295 
00303 
00304 inline bool LoadBinary(void *data,size_t size,const char *fname,const char *mode="rb" ){//="rb"
00305     FILE *fp ;
00306     fp = fopen( fname , mode ) ;//rb
00307     if(fp==NULL)return false;
00308     fread( data ,  size , 1 , fp ) ;
00309     //fread( data , sizeof(size)  , 1 , fp ) ;
00310     fclose( fp ) ;
00311     return true;
00312 }
00313 
00314 inline bool SaveText(const char *text,size_t length,const char *fname,const char *mode="wt"){
00315     return SaveBinary(text,length,fname,mode);
00316 }
00317 inline bool LoadText(char *text,size_t length,const char *fname,const char *mode="rt"){
00318     return LoadBinary(text,length,fname,mode);
00319 }
00320 
00321 
00322 
00323 }//end of dkutil namespace
00324 
00325 
00326 #else //for c lang
00327 
00328 
00329 #endif //end of __cplusplus
00330 
00332 DKC_EXTERN BOOL WINAPI dkcIsNativePathString(const char *s,size_t size);
00333 
00334 
00335 
00336 /*
00337 @param OldSize[in] 元のメモリ領域のサイズ
00338 @param ExpandSize[in] 足りないメモリ領域のサイズ
00339 @return 多分、理想系のサイズ?カナ?
00340 @note reallocする時の最適なメモリサイズを計算する。
00341 (内部実装はちょくちょく変わります。
00342 */
00343 
00344 DKC_EXTERN  size_t dkcReallocateSizeFunction(size_t OldSize,size_t ExpandSize);
00345 
00346 DKC_EXTERN  void* WINAPIV dkcAllocate(size_t size);
00347 
00348 DKC_EXTERN  int WINAPIV dkcFree(void **p);
00349 
00350 DKC_EXTERN  int WINAPI dkcReallocate(
00351     void **NewPtr,size_t NewSize,void **OldPtr
00352 );
00353 
00361 
00362 DKC_EXTERN int WINAPI dkcReallocateEx(
00363     DKC_REALLOC_F_TYPE your_realloc,void **NewPtr,size_t NewSize,
00364     void **OldPtr
00365 );
00366 
00376 DKC_EXTERN int WINAPI dkcReallocateAutoExpand(
00377     DKC_REALLOC_F_TYPE your_realloc,void **NewPtr,
00378     void **OldPtr,size_t OldSize,size_t *reallocated_size
00379 );
00380 
00384 DKC_EXTERN void WINAPI 
00385     dkcSwap(void *p1,void *p2,size_t size);
00392 DKC_EXTERN void WINAPI dkcSwapFast(void *p1,void *p2,size_t size);
00393 
00401 DKC_EXTERN void WINAPI dkcSwap64(ULONGLONG *p1,ULONGLONG *p2,size_t size);
00402 
00403 
00404 
00405 //#define dkcSwap(p1_,p2_,size) dkcSwap64(p1_,p2_,size)
00406 /*
00407 #define dkcSwapFast(p1,p2,size) dkcSwap64(p1,p2,size)
00408 */
00409 
00410 
00412 DKC_EXTERN BOOL dkcIs_foepn_mode(const char *s);
00414 DKC_EXTERN FILE * WINAPI dkcFOpen(const char *filename,const char *mode);
00416 DKC_EXTERN int WINAPI dkcFClose(FILE **ptr);
00417 
00419 DKC_EXTERN size_t WINAPI dkcFReadAll(void *,size_t size,FILE *fp);
00421 DKC_EXTERN size_t WINAPI dkcFWriteAll(void *,size_t size,FILE *fp);
00422 
00423 
00425 DKC_EXTERN int WINAPI dkcSaveBinary(const void *data,size_t size,const char *fname);
00426 
00428 DKC_EXTERN int WINAPI dkcLoadBinary(void *data,size_t size,const char *fname,size_t *readsize);
00430 DKC_EXTERN int WINAPI dkcSaveText(const char *text,size_t length,const char *fname);
00432 DKC_EXTERN int WINAPI dkcLoadText(char *text,size_t length,const char *fname,size_t *readsize);
00434 DKC_EXTERN BOOL WINAPI dkcCreateEmptyFile(const char *filename);
00435 
00436 
00437 DKC_EXTERN void WINAPI dkcTwoDWORDToULONGLONG(ULONGLONG *dest,DWORD high,DWORD low);
00438 
00439 DKC_EXTERN void WINAPI dkcULONGLONGToTwoDWORD(DWORD *dhigh,DWORD *dlow,ULONGLONG src);
00440 
00444 DKC_EXTERN int WINAPI dkcErrorMessage(const char *expression,
00445                                          const char *filename,size_t line,const char *message,...);
00446 
00447 
00448 
00449 #if defined(DEBUG) || defined(DKUTIL_DEBUG)
00450 #   define dkcmNOT_ASSERT(ex) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00451 #   define dkcmASSERT(ex) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00452 #   define dkcmNOT_ASSERT_MESSAGE(ex,mes) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00453 #   define dkcmASSERT_MESSAGE(ex,mes) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00454 #else
00455 #   define dkcmNOT_ASSERT_MESSAGE(ex,mes) ((void)0)
00456 #   define dkcmASSERT_MESSAGE(ex,mes) ((void)0)
00457 #   define dkcmNOT_ASSERT(ex) ((void)0)
00458 #   define dkcmASSERT(ex) ((void)0)
00459 #endif
00460 
00461 #   define dkcmFORCE_NOT_ASSERT(ex) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00462 #   define dkcmFORCE_ASSERT(ex) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00463 #   define dkcmFORCE_NOT_ASSERT_MESSAGE(ex,mes) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00464 #   define dkcmFORCE_ASSERT_MESSAGE(ex,mes) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00465 
00467 DKC_EXTERN const char *WINAPI dkcGetPathSep();
00468 
00469 DKC_EXTERN void WINAPI dkcCheckMemoryLeak(BOOL flag);
00471 DKC_EXTERN BOOL WINAPI dkcIsMMX();
00472 
00473 
00474 
00476 DKC_EXTERN ULONG dkcReverseEndian32(ULONG x);
00478 DKC_EXTERN ULONGLONG dkcReverseEndian64(ULONGLONG x);
00480 DKC_EXTERN USHORT dkcReverseEndian16(USHORT x);
00481 
00483 DKC_EXTERN BOOL dkcIsLittleEndian();
00485 #define dkcIsBigEndian() (!dkcIsLittleEndian())
00486 
00487 typedef int (WINAPIV *DKC_COMPARE_TYPE)(const void *,const void *);
00488 
00512 
00513 DKC_EXTERN int WINAPI dkcSelect(void *dest,const void *a_src,size_t n,int k,size_t width ,DKC_COMPARE_TYPE comp);
00514 
00519 DKC_EXTERN int WINAPI dkcSelectMax(void *dest,const void *a, size_t n,size_t width ,DKC_COMPARE_TYPE comp);
00524 DKC_EXTERN int WINAPI dkcSelectMin(void *dest,const void *a, size_t n,size_t width ,DKC_COMPARE_TYPE comp);
00525 
00526 
00527 
00528 
00529 /*
00530 DKC_EXTERN void dkcSetAllocateMode(int flag);
00531 
00532 DKC_EXTERN void *dkcDebugAlloc
00533 */
00534 
00535 
00536 
00537 
00538 
00539 
00540 
00541 #endif //end of include once

dkutil_cに対してSun Jul 18 22:45:21 2004に生成されました。 doxygen 1.3.6