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

dkcOSIndependent.h

独立系 [詳細]

#include "dkcDefined.h"
#include <limits.h>
#include <direct.h>

dkcOSIndependent.hのインクルード依存関係図

Include dependency graph

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

Included by dependency graph

ソースコードを見る。

構成

struct  dkc_4char

マクロ定義

#define ULONGLONG   unsigned long long int
#define LONGLONG   long long int
#define ULONGLONG_MAX   DKINGYO_ULONGLONG_MAX
#define LONGLONG_MAX   DKINGYO_LONGLONG_MAX
#define LONGLONG_MIN   DKINGYO_LONGLONG_MIN
#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 DKC_INLINE
#define DKC_EXPORT
#define DKC_IMPORT
#define DKC_EXTERN   DKUTIL_EXTERN
#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 dkcIsBigEndian()   (!dkcIsLittleEndian())
 big endianならTRUE


型定義

typedef unsigned long long QWORD
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 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 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)


説明

独立系

覚え書き:
at joke : Don't forget "Independence Day" of the Movie...^^;

dkcOSIndependent.h で定義されています。


マクロ定義

#define DKC_EXPORT
 

dkcOSIndependent.h214 行で定義されています。

#define DKC_EXTERN   DKUTIL_EXTERN
 

dkcOSIndependent.h216 行で定義されています。

参照元 dkcArcfourByte(), dkcFClose(), dkcFOpen(), dkcFReadAll(), dkcFWriteAll(), と dkcIsShiftJIS().

#define DKC_IMPORT
 

dkcOSIndependent.h215 行で定義されています。

#define DKC_INLINE
 

dkcOSIndependent.h193 行で定義されています。

参照元 Ch(), CheckMMX(), Default_Generate(), dkcArcfourEncrypt_Base(), dkcIsLittleEndian(), dkcReverseEndian16(), dkcReverseEndian32(), dkcReverseEndian64(), dkcSelectMax(), dkcSelectMin(), dkcStreamRead(), dkcStreamReadObayAnOrder(), dkcStreamWrite(), dkcStreamWriteObayAnOrder(), FileWithSignatureGetDigest(), FileWithSignatureIsFinalized(), FileWithSignatureReadLogic(), FileWithSignatureWriteLogic(), Generate(), GetHeader(), HeaderWrite(), isDoubleProcess(), isJMS(), jms1(), jms2(), Maj(), MMX_Generate(), ReadEOFCheck(), ReverseEndian(), ReverseEndianDWORD(), ReverseEndianQWORD(), Rotate(), s0(), S0(), s1(), S1(), SetStreamInfo(), と strtail().

#define dkcdMAXPATH   1024
 

dkcOSIndependent.h238 行で定義されています。

参照元 dkcPathStringConcatenate(), と dkcPathStringCopy().

#define dkcdMAXPATH_BUFFER   dkcdMAXPATH * 2
 

安全なMAX_PATHのバッファのサイズ なんかWindows2000だとこういう場合もあるらしいから

dkcOSIndependent.h255 行で定義されています。

参照元 dkcAllocPathString(), dkcCreateDirectory(), dkcGetCurrentDirectory(), dkcIsEffectivePath(), dkcPathStringNormalizeConcatenateLogic(), dkcPathStringNormalizeCopyLogic(), と dkcToAbsolutelyPath().

#define dkcdMAXPATH_LEN   dkcdMAXPATH
 

dkcOSIndependent.h244 行で定義されています。

参照元 dkcCreateDirectory(), と dkcCurrentDirectoryConcatenate().

#define dkcdPATH_LIST_SEP   ':'
 

dkcOSIndependent.h63 行で定義されています。

#define dkcdPATH_LIST_SEP_STR   ":"
 

dkcOSIndependent.h64 行で定義されています。

#define dkcdPATH_SEP   '/'
 

dkcOSIndependent.h61 行で定義されています。

参照元 dkcCreateDirectory(), dkcGetPathSep(), dkcPathStringGetDirectory(), dkcPathStringGetFileName(), と dkcPushBackPathSep().

#define dkcdPATH_SEP_STR   "/"
 

dkcOSIndependent.h62 行で定義されています。

参照元 dkcPathStringNormalizeConcatenateLogic().

 
#define dkcIsBigEndian  )     (!dkcIsLittleEndian())
 

big endianならTRUE

dkcOSIndependent.h485 行で定義されています。

#define dkcmASSERT ex   )     ((void)0)
 

dkcOSIndependent.h458 行で定義されています。

#define dkcmASSERT_MESSAGE ex,
mes   )     ((void)0)
 

dkcOSIndependent.h456 行で定義されています。

#define dkcmFORCE_ASSERT ex   )     ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
 

dkcOSIndependent.h462 行で定義されています。

#define dkcmFORCE_ASSERT_MESSAGE ex,
mes   )     ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
 

dkcOSIndependent.h464 行で定義されています。

#define dkcmFORCE_NOT_ASSERT ex   )     ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
 

dkcOSIndependent.h461 行で定義されています。

参照元 Enter(), と Leave().

#define dkcmFORCE_NOT_ASSERT_MESSAGE ex,
mes   )     ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
 

dkcOSIndependent.h463 行で定義されています。

#define dkcmIS_INVALID_FILENAME_CHAR  ) 
 

値:

( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \
        || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') )

dkcOSIndependent.h67 行で定義されています。

#define dkcmIS_INVALID_FOLDERNAME_CHAR  )     dkcmIS_INVALID_FILENAME_CHAR(c)
 

dkcOSIndependent.h70 行で定義されています。

参照元 dkcCreateDirectory().

#define dkcmIS_INVALID_PATH_CHAR  ) 
 

値:

( ( (c)=='\\') || ((c)=='*') || ((c)=='?') || ((c)== '"') || \
    ((c) == '<') || ((c) == '>') || ((c) == '|') )

dkcOSIndependent.h73 行で定義されています。

参照元 dkcIsNativePathString().

#define dkcmIS_PATH_SEP  )     (dkcdPATH_SEP==(c))
 

dkcOSIndependent.h65 行で定義されています。

参照元 dkcCreateDirectory().

#define dkcmNOT_ASSERT ex   )     ((void)0)
 

dkcOSIndependent.h457 行で定義されています。

参照元 dkcAllocBufferCopy(), dkcAllocCircularMemoryStreamCopy(), dkcAllocDeserialize(), dkcAllocMemoryStreamCopy(), dkcAllocMemoryStreamDeserialize(), dkcAllocQueueDeserialize(), dkcAllocSerialize(), dkcAllocSingleListDeserialize(), dkcAllocSingleListObjectDeserialize(), dkcAllocStackDeserialize(), dkcCreateDirectory(), dkcCurrentDirectoryConcatenate(), dkcDeserializeRead(), dkcDirectoryConcatenate(), dkcFileCopyEx(), dkcFReadAll(), dkcFreeStream(), dkcFWriteAll(), dkcIsRelativityPath(), dkcLZSSEncode(), dkcMemoryStreamClear(), dkcMemoryStreamRead(), dkcMemoryStreamSerialize(), dkcMemoryStreamWrite(), dkcPathStringConcatenate(), dkcPathStringCopy(), dkcPathStringDevideBegin_Logic(), dkcPathStringNormalizeCopyLogic(), dkcQueuePop(), dkcQueuePush(), dkcQueueSerialize(), dkcQueueTop(), dkcSerializeWrite(), dkcSetCurrentDirectory(), dkcSingleListChain(), dkcSingleListInsert(), dkcSingleListSerialize(), dkcStackPop(), dkcStackPush(), dkcStackSerialize(), dkcStackTop(), dkcStreamReadObayAnOrder(), dkcStreamWriteObayAnOrder(), dkcStringConcatenate(), dkcStringCopy(), dkcStringInsert(), dkcStringSerialize(), dkcSwapFast(), dkcULONGLONGToTwoDWORD(), End(), Leave(), と SetStreamInfo().

#define dkcmNOT_ASSERT_MESSAGE ex,
mes   )     ((void)0)
 

dkcOSIndependent.h455 行で定義されています。

参照元 dkcCreateDirectory().

#define FALSE   0
 

dkcOSIndependent.h54 行で定義されています。

参照元 dkc_stream_swap(), dkcAllocDeserialize(), dkcAllocPathString(), dkcCircularMemoryStreamRead(), dkcCircularMemoryStreamReadLogic(), dkcCircularStreamRead(), dkcCircularStreamReadLogic(), dkcCombSort(), dkcCreateDirectory(), dkcCreateEmptyFile(), dkcCreateZeroByteFile(), dkcFileCopy(), dkcFileCopyEx(), dkcFileExist(), dkcFileWithSignatureCheckCheat(), dkcGetCurrentDirectory(), dkcIs_foepn_mode(), dkcIsEffectivePath(), dkcIsMMX(), dkcIsNativePathString(), dkcIsRelativityPath(), dkcIsTailPathSep(), dkcLZSSDecode(), dkcMD5Init(), dkcOpenFileWithSignature(), dkcPathStringElementInsert_Logic(), dkcPathStringElementReplace_Logic(), dkcPathStringNormalizeConcatenateLogic(), dkcPushBackPathSep(), dkcSetCurrentDirectory(), dkcSHA1Digest(), dkcSHA1DigestStr(), dkcSHA1Init(), dkcSHA256Digest(), dkcSHA256DigestStr(), dkcSHA256Init(), dkcSHA384Digest(), dkcSHA384DigestStr(), dkcSHA384Init(), dkcSHA512Digest(), dkcSHA512DigestStr(), dkcSHA512Init(), Encode(), End(), Enter(), Leave(), と SetStreamInfo().

#define LONGLONG   long long int
 

dkcOSIndependent.h36 行で定義されています。

#define LONGLONG_MAX   DKINGYO_LONGLONG_MAX
 

dkcOSIndependent.h44 行で定義されています。

#define LONGLONG_MIN   DKINGYO_LONGLONG_MIN
 

dkcOSIndependent.h47 行で定義されています。

#define MAYBE   2
 

dkcOSIndependent.h261 行で定義されています。

#define NULL   0
 

dkcOSIndependent.h58 行で定義されています。

参照元 dkcAllocArcfour(), dkcAllocate(), dkcAllocBlowfish(), dkcAllocBuffer(), dkcAllocBufferCopy(), dkcAllocCircularMemoryStream(), dkcAllocCircularMemoryStreamCopy(), dkcAllocDeque(), dkcAllocDeserialize(), dkcAllocMD5(), dkcAllocMemoryStream(), dkcAllocMemoryStreamCopy(), dkcAllocMemoryStreamDeserialize(), dkcAllocNewCircularStream(), dkcAllocPathString(), dkcAllocQueue(), dkcAllocQueueDeserialize(), dkcAllocSerialize(), dkcAllocSHA1(), dkcAllocSHA256(), dkcAllocSHA384(), dkcAllocSHA512(), dkcAllocSingleList(), dkcAllocSingleListBuffer(), dkcAllocSingleListDeserialize(), dkcAllocSingleListObject(), dkcAllocSingleListObjectDeserialize(), dkcAllocStack(), dkcAllocStackDeserialize(), dkcAllocStream(), dkcAllocStreamFileType(), dkcAllocStreamMemoryType(), dkcAllocString(), dkcAllocStringDeserialize(), dkcAllocUniqueID(), dkcBufferResize(), dkcCircularMemoryStreamClear(), dkcCircularMemoryStreamReadLogic(), dkcCircularMemoryStreamWrite(), dkcCircularStreamDump(), dkcCircularStreamReadLogic(), dkcCircularStreamWrite(), dkcCircularStreamZero(), dkcCloseFileWithSignature(), dkcCreateDirectory(), dkcCreateEmptyFile(), dkcDeleteCircularStream(), dkcDeleteSingleList(), dkcDeserializeRead(), dkcDistCountSortChar(), dkcDistCountSortInt(), dkcDistCountSortShort(), dkcEasyVernamEncrypt(), dkcErrorMessage(), dkcFClose(), dkcFileCopyEx(), dkcFindClose(), dkcFindFileGetFileName(), dkcFindFirstFile(), dkcFree(), dkcFreeArcfour(), dkcFreeBlowfish(), dkcFreeBuffer(), dkcFreeCircularMemoryStream(), dkcFreeDeleteCircularStream(), dkcFreeDeque(), dkcFreeDeserialize(), dkcFreeFindFile(), dkcFreeLZSS(), dkcFreeMD5(), dkcFreeMemoryStream(), dkcFreePathString(), dkcFreeQueue(), dkcFreeSerialize(), dkcFreeSHA1(), dkcFreeSHA256(), dkcFreeSHA384(), dkcFreeSHA512(), dkcFreeSingleList(), dkcFreeSingleListObject(), dkcFreeStack(), dkcFreeStream(), dkcFreeString(), dkcFreeUniqueID(), dkcGetCurrentDirectory(), dkcGetProcAddress(), dkcGetSingleListBuffer(), dkcIsNativePathString(), dkcIsRelativityPath(), dkcLoadFile(), dkcLoadLibrary(), dkcLZSSDecode(), dkcLZSSEncode(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamClear(), dkcMemoryStreamDynamicWrite(), dkcMemoryStreamRead(), dkcMemoryStreamResize(), dkcMemoryStreamSeek(), dkcMemoryStreamSerialize(), dkcMemoryStreamWrite(), dkcNewCircularStream(), dkcNewCircularStreamForFile(), dkcNewSingleList(), dkcOpenFileWithSignature(), dkcPathStringDevideBegin_Logic(), dkcPathStringNormalizeCopyLogic(), dkcQueueClear(), dkcQueuePop(), dkcQueuePush(), dkcQueueSerialize(), dkcQueueTop(), dkcReallocateAutoExpand(), dkcReallocateEx(), dkcSaveFile(), dkcSelect(), dkcSerializeWrite(), dkcSingleListChain(), dkcSingleListErase(), dkcSingleListGetBuffer(), dkcSingleListInsert(), dkcSingleListSerialize(), dkcSingleListSetBuffer(), dkcSingleListSize(), dkcSingleListTail(), dkcSLOEndLogic(), dkcStackPop(), dkcStackPush(), dkcStackSerialize(), dkcStackTop(), dkcStreamProcess16(), dkcStreamProcess32(), dkcStreamProcess64(), dkcStreamRead(), dkcStreamReadObayAnOrder(), dkcStreamWrite16(), dkcStreamWrite32(), dkcStreamWrite64(), dkcStringConcatenate(), dkcStringCopy(), dkcStringGetBuffer(), dkcStringInsert(), dkcStringSerialize(), dkcStrStr(), dkcSwapFast(), dkcToAbsolutelyPath(), dkcUnloadLibrary(), dkcVernamEncrypt(), FileWithSignatureReadLogic(), GetHeader(), と ToAbsolutelyLogic().

#define TRUE   1
 

dkcOSIndependent.h51 行で定義されています。

参照元 Decode(), dkc_stream_swap(), dkcAllocSerialize(), dkcCircularMemoryStreamReference(), dkcCircularStreamReference(), dkcCombSort(), dkcCreateEmptyFile(), dkcCreateZeroByteFile(), dkcErrorMessage(), dkcFileCopyEx(), dkcFileExist(), dkcFileWithSignatureCheckCheat(), dkcFileWithSignatureRead(), dkcGetCurrentDirectory(), dkcIs_foepn_mode(), dkcIsEffectivePath(), dkcIsNativePathString(), dkcIsRelativityPath(), dkcIsTailPathSep(), dkcMD5Final(), dkcOpenFileWithSignature(), dkcSHA1Final(), dkcSHA256Final(), dkcSHA512Final(), dkcSLOPushBackLogic(), dkcToAbsolutelyPath(), Init(), InsertNode(), ReadEOFCheck(), と SetStreamInfo().

#define ULONGLONG   unsigned long long int
 

dkcOSIndependent.h32 行で定義されています。

参照元 dkcCloseFileWithSignature(), dkcFileWithSignatureCheckCheat(), dkcFileWithSignatureRead(), dkcReverseEndian64(), dkcStreamProcess64(), dkcSwap(), dkcSwap64(), dkcTwoDWORDToULONGLONG(), dkcULONGLONGToTwoDWORD(), と ReadEOFCheck().

#define ULONGLONG_MAX   DKINGYO_ULONGLONG_MAX
 

dkcOSIndependent.h41 行で定義されています。


型定義

typedef int BOOL
 

dkcOSIndependent.h80 行で定義されています。

参照元 CheckMMX(), Decode(), dkc_stream_swap(), dkcCheckMemoryLeak(), dkcCircularMemoryStreamReadLogic(), dkcCircularStreamReadLogic(), dkcCombSort(), dkcCreateDirectory(), dkcCreateDirectoryLogic(), dkcCreateEmptyFile(), dkcCreateZeroByteFile(), dkcFileCopy(), dkcFileCopyEx(), dkcFileExist(), dkcFileRemove(), dkcFileRename(), dkcFindFileIsDot(), dkcFindFileIsFolder(), dkcFindFileIsNormalFile(), dkcFindFileIsReadOnly(), dkcGetCurrentDirectory(), dkcIs_foepn_mode(), dkcIsAbsolutelyPath(), dkcIsEffectivePath(), dkcIsLittleEndian(), dkcIsMMX(), dkcIsRelativityPath(), dkcIsSJIS1(), dkcIsSJIS2(), dkcIsSpace(), dkcIsTailPathSep(), dkcOpenFileWithSignature(), dkcQueueIsEmpty(), dkcSetCurrentDirectory(), dkcSLOEmptyLogic(), dkcSLOEndLogic(), dkcSLOPushBackLogic(), dkcStackIsEmpty(), dkcThreadLockIsInited(), dkcThreadLockIsLockedByThisThread(), Encode(), FileWithSignatureIsFinalized(), isDoubleProcess(), jms1(), jms2(), と SetStreamInfo().

typedef unsigned char BYTE
 

dkcOSIndependent.h81 行で定義されています。

参照元 dkcAllocBlowfish(), dkcBlowfishDecrypt(), dkcBlowfishEncrypt(), dkcBlowfishInit(), dkcBubbleSort(), dkcBufferPointer(), dkcCombSort(), dkcDecryptByte(), dkcEasyVernamEncrypt(), dkcEncryptByte(), dkcFileWithSignatureCheckCheat(), dkcFReadAll(), dkcFWriteAll(), dkcIsSJIS1(), dkcIsSJIS2(), dkcIsSpace(), dkcLZSSDecode(), dkcLZSSEncode(), dkcMD5Digest(), dkcMD5FinalDigest(), dkcMD5Load(), dkcMD5LoadStandard(), dkcMemoryStreamWrite(), dkcOpenFileWithSignature(), dkcQueuePush(), dkcQueueTop(), dkcSHA1Digest(), dkcSHA1Final(), dkcSHA1FinalDigest(), dkcSHA1Load(), dkcSHA256Digest(), dkcSHA256Final(), dkcSHA256FinalDigest(), dkcSHA256Load(), dkcSHA384Digest(), dkcSHA384DigestStr(), dkcSHA384FinalDigest(), dkcSHA384Load(), dkcSHA512Digest(), dkcSHA512Final(), dkcSHA512FinalDigest(), dkcSHA512Load(), dkcShellSort(), dkcStackDynamicPush(), dkcStackPush(), dkcStackTop(), dkcStreamReadObayAnOrder(), dkcStreamWriteObayAnOrder(), dkcSwap64(), dkcVernamEncrypt(), get_offset(), GetHeader(), HeaderWrite(), と SetStreamInfo().

typedef struct dkc_4char DKC_4CHAR
 

typedef int(WINAPIV * DKC_COMPARE_TYPE)(const void *,const void *)
 

dkcOSIndependent.h487 行で定義されています。

参照元 dkcSelect(), dkcSelectMax(), と dkcSelectMin().

typedef void *(* DKC_REALLOC_F_TYPE)(void *, size_t)
 

dkcOSIndependent.h78 行で定義されています。

参照元 dkcReallocateAutoExpand(), と dkcReallocateEx().

typedef unsigned long long QWORD
 

dkcOSIndependent.h25 行で定義されています。

参照元 Ch(), Default_Generate(), dkcSHA512Final(), dkcSHA512Load(), Maj(), ReverseEndianQWORD(), Rotate(), s0(), S0(), s1(), と S1().


関数

DKC_EXTERN void* WINAPIV dkcAllocate size_t  size  ) 
 

dkcOSIndependent.c108 行で定義されています。

参照先 NULL.

参照元 dkcAllocArcfour(), dkcAllocBlowfish(), dkcAllocBuffer(), dkcAllocCircularMemoryStream(), dkcAllocDeque(), dkcAllocDeserialize(), dkcAllocFindFile(), dkcAllocLZSS(), dkcAllocMD5(), dkcAllocMemoryStream(), dkcAllocNewCircularStream(), dkcAllocPathString(), dkcAllocQueue(), dkcAllocSerialize(), dkcAllocSHA1(), dkcAllocSHA256(), dkcAllocSHA384(), dkcAllocSHA512(), dkcAllocSingleList(), dkcAllocSingleListObject(), dkcAllocStack(), dkcAllocStream(), dkcAllocString(), dkcAllocUniqueID(), dkcCircularStreamDump(), dkcDistCountSortChar(), dkcDistCountSortInt(), dkcDistCountSortShort(), dkcLoadLibrary(), dkcNewSingleList(), と dkcOpenFileWithSignature().

00108                               {
00109     void *ptr;
00110     ptr = malloc(size);
00111     if(NULL==ptr) return NULL;
00112     memset(ptr,0,size);
00113     return ptr;
00114 }

DKC_EXTERN void WINAPI dkcCheckMemoryLeak BOOL  flag  ) 
 

dkcOSIndependent.c524 行で定義されています。

参照先 BOOL.

00524                                          {
00525 
00526 }

DKC_EXTERN BOOL WINAPI dkcCreateEmptyFile const char *  filename  ) 
 

空ファイルを作る。

dkcOSIndependent.c381 行で定義されています。

参照先 BOOL, FALSE, NULL, と TRUE.

参照元 dkcFileCopyEx().

00381                                                     {
00382     FILE *fp;
00383     fp = fopen( filename , "wb" ) ;//wb
00384     if(fp==NULL) return FALSE;
00385     fclose( fp ) ;
00386     return TRUE;
00387 }

DKC_EXTERN int WINAPI dkcErrorMessage const char *  expression,
const char *  filename,
size_t  line,
const char *  message,
... 
 

戻り値:
almost TRUE(1)

dkcOSIndependent.c28 行で定義されています。

参照先 edk_FAILED, MB, NULL, NULL_CHAR_ARRAY, ODS, SET_VA_LIST_C, と TRUE.

00030 {
00031     char s[1024];
00032     char ss[1024 * 2];
00033     
00034     int va_list_result;
00035     va_list Valist;
00036 
00037     NULL_CHAR_ARRAY(s);
00038     NULL_CHAR_ARRAY(ss);
00039     
00040     if(message){
00041         SET_VA_LIST_C(Valist,va_list_result,s,sizeof(s),message);
00042     }else{
00043         //SET_VA_LIST(s,sizeof(s),"No message");
00044         _snprintf(s,sizeof(s),"No message\n");
00045     }
00046 
00047     _snprintf(ss,sizeof(ss),
00048         "DKUTIL_ASSERT(%s):\nfile:%s / \n line:%d / \n message: %s",
00049         expression,filename,line,s);
00050 
00051 
00052 
00053 #ifdef NDEBUG//release
00054 #   ifdef WIN32
00055         ODS(ss);
00056     //::MessageBox(NULL,ss,"ERROR ASSERTION !!",MB_OK);
00057     {
00058         LPCTSTR name="ERROR_TEMP.txt";
00059         {
00060             //ファイルをオープン
00061             FILE *fp;
00062             if(NULL != (fp = fopen( name , "at" ))){
00063             
00064                 // エラーログファイルに書き出す
00065                 fputs( ss , fp ) ;
00066                 fclose( fp ) ;
00067             }
00068         }
00069         ShellExecute(NULL, "open",name, NULL, NULL, SW_SHOWNORMAL);
00070         DeleteFile(name);
00071     }
00072     MB("このテキストをこのソフトの開発者に渡せば、バグ発見の近道なります。\n \
00073         開発者に知らせるときはこのテキストを転記してあげましょう。");
00074     if(IDYES==MessageBox(NULL,
00075         "このままこのソフトを起動しつづけると、更なるエラーが発生する可能性があります。\n終了しますか?",
00076         "あってはいけない エラー!!!",
00077         MB_YESNO))
00078     {
00079         exit(edk_FAILED);
00080         //terminate();
00081     }else{
00082     }
00083 #   else    //else of win32
00084     
00085     fprintf(stderr,ss);
00086     exit(edk_FAILED);
00087 
00088 #   endif //end of win32
00089 
00090 #else //debug
00091 
00092 #   ifdef WIN32
00093         ODS(ss);
00094     fprintf(stderr,ss);
00095     //_CrtDebugBreak();
00096     DebugBreak();
00097 #   else //else of win32
00098 
00099     fprintf(stderr,ss);
00100     Debugger();
00101 
00102 #   endif //end of win32
00103 #endif//end of NDEBUG
00104     //assert(ss);
00105     
00106     return TRUE;
00107 }

DKC_EXTERN int WINAPI dkcFClose FILE **  ptr  ) 
 

fcloseのラッパー

dkcOSIndependent.c281 行で定義されています。

参照先 DKC_EXTERN, edk_ArgumentException, edk_SUCCEEDED, と NULL.

参照元 dkcDeleteCircularStream(), dkcFileCopyEx(), dkcFreeStream(), と GetHeader().

00281                                            {
00282     if(NULL==ptr || NULL==*ptr) return edk_ArgumentException;
00283     fclose(*ptr);
00284     *ptr = NULL;
00285     return edk_SUCCEEDED;
00286 }

DKC_EXTERN FILE* WINAPI dkcFOpen const char *  filename,
const char *  mode
 

fopenのラッパー

dkcOSIndependent.c277 行で定義されています。

参照先 DKC_EXTERN.

参照元 dkcAllocStream(), dkcFileCopyEx(), dkcNewCircularStreamForFile(), と GetHeader().

00277                                                                         {
00278     return fopen(filename,mode);
00279 }

DKC_EXTERN size_t WINAPI dkcFReadAll void *  ,
size_t  size,
FILE *  fp
 

freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror)

dkcOSIndependent.c287 行で定義されています。

参照先 BYTE, DKC_EXTERN, と dkcmNOT_ASSERT.

参照元 GetHeader().

00288 {
00289     size_t count;
00290     size_t tc,tsize;
00291     BYTE *tbuffer;
00292 
00293     //read size
00294     tsize = size;
00295     //temp variable
00296     tc = 0;
00297     //offset counter
00298     count = 0;
00299     //byte type pointer
00300     tbuffer = (BYTE *)buffer;
00301     for(;;)
00302     {
00303         //error check
00304         if(ferror(fp) ){
00305             break;
00306         }
00307         if(feof(fp)){
00308             break;
00309         }
00310         //read
00311         tc = fread(&tbuffer[count],1,tsize,fp);
00312         //update
00313         tsize -= tc;
00314         count += tc;
00315 
00316         if(count == size){
00317             break;
00318         }
00319 #   ifdef DEBUG
00320         //ありえないエラーチェック
00321         dkcmNOT_ASSERT(count > size);
00322 #   else
00323         if(count > size){
00324             break;
00325         }
00326 #   endif
00327     }
00328     return count;
00329 }

DKC_EXTERN int WINAPIV dkcFree void **  p  ) 
 

dkcOSIndependent.c115 行で定義されています。

参照先 edk_FAILED, edk_SUCCEEDED, と NULL.

参照元 dkcAllocBuffer(), dkcAllocCircularMemoryStream(), dkcAllocDeque(), dkcAllocDeserialize(), dkcAllocMemoryStream(), dkcAllocNewCircularStream(), dkcAllocPathString(), dkcAllocQueue(), dkcAllocSerialize(), dkcAllocSingleList(), dkcAllocSingleListObject(), dkcAllocStack(), dkcAllocStream(), dkcAllocString(), dkcAllocUniqueID(), dkcCloseFileWithSignature(), dkcDeleteCircularStream(), dkcDistCountSortChar(), dkcDistCountSortInt(), dkcDistCountSortShort(), dkcFreeArcfour(), dkcFreeBlowfish(), dkcFreeBuffer(), dkcFreeCircularMemoryStream(), dkcFreeDeleteCircularStream(), dkcFreeDeque(), dkcFreeDeserialize(), dkcFreeFindFile(), dkcFreeLZSS(), dkcFreeMD5(), dkcFreeMemoryStream(), dkcFreePathString(), dkcFreeQueue(), dkcFreeSerialize(), dkcFreeSHA1(), dkcFreeSHA256(), dkcFreeSHA384(), dkcFreeSHA512(), dkcFreeSingleListObject(), dkcFreeStack(), dkcFreeStream(), dkcFreeString(), dkcFreeUniqueID(), dkcLoadLibrary(), dkcOpenFileWithSignature(), dkcSingleListErase(), と dkcUnloadLibrary().

00115                      {
00116     if(!*p) return edk_FAILED;
00117     free(*p);
00118     *p = NULL;
00119     return edk_SUCCEEDED;
00120 }

DKC_EXTERN size_t WINAPI dkcFWriteAll void *  ,
size_t  size,
FILE *  fp
 

dkcFReadAll() dkcFReadAllのfwrite版

dkcOSIndependent.c331 行で定義されています。

参照先 BYTE, DKC_EXTERN, と dkcmNOT_ASSERT.

00331                                                                         {
00332     size_t count;
00333     size_t tc,tsize;
00334     BYTE *tbuffer;
00335 
00336     //read size
00337     tsize = size;
00338     //temp variable
00339     tc = 0;
00340     //offset counter
00341     count = 0;
00342     //byte type pointer
00343     tbuffer = (BYTE *)buffer;
00344     for(;;)
00345     {
00346         //error check
00347         if(ferror(fp) ){
00348             break;
00349         }
00350         if(feof(fp)){
00351             break;
00352         }
00353         //read
00354         tc = fwrite(&tbuffer[count],1,tsize,fp);
00355         //update
00356         tsize -= tc;
00357         count += tc;
00358 
00359         if(count == size){
00360             break;
00361         }
00362 #   ifdef DEBUG
00363         //ありえないエラーチェック
00364         dkcmNOT_ASSERT(count > size);
00365 #   else
00366         if(count > size){
00367             break;
00368         }
00369 #   endif
00370     }
00371     return count;
00372 
00373 }

DKC_EXTERN const char* WINAPI dkcGetPathSep  ) 
 

path separatorの入った文字列(1byte毎にpath separatorの文字定数が入っている)をゲット

dkcOSIndependent.c529 行で定義されています。

参照先 dkcdPATH_SEP.

参照元 dkcSJIS_SearchPathSep(), と dkcSJIS_SearchPathSepLast().

00529                                   {
00530 #ifdef WIN32
00531     static char target[3]={dkcdPATH_SEP,'/','\0'};
00532 #else
00533     static char target[3]={dkcdPATH_SEP,'\0'};
00534 #endif
00535     return target;
00536 }

DKC_EXTERN BOOL dkcIs_foepn_mode const char *  s  ) 
 

fopenの時の第二引数が有効な値かどうか調べる。

dkcOSIndependent.c121 行で定義されています。

参照先 BOOL, FALSE, と TRUE.

00121                                     {
00122     /* wrtb+ */
00123     const char *ms= "wrtb+";
00124     size_t slen = strlen(s);
00125     size_t mslen = strlen(ms);
00126     size_t i,j;
00127     int flag = FALSE;
00128     for(i=0;i<slen;i++){
00129         for(j=0;j<mslen;j++){
00130             if(ms[j]==s[i]){
00131                 flag = TRUE;
00132                 break;
00133             }
00134         }
00135         if(TRUE!=flag){
00136             return FALSE;
00137         }else{
00138             flag = FALSE;
00139         }
00140     }
00141     return TRUE;
00142 }

DKC_EXTERN BOOL dkcIsLittleEndian  ) 
 

little endian ならTRUE

dkcOSIndependent.c593 行で定義されています。

参照先 BOOL, と DKC_INLINE.

参照元 dkcOpenFileWithSignature(), GetHeader(), HeaderWrite(), と SetStreamInfo().

00593                                     {
00594     int x=1;
00595     return (BOOL)((*(char*)&x));
00596 }

DKC_EXTERN BOOL WINAPI dkcIsMMX  ) 
 

MMXが使えるならTRUE.

dkcOSIndependent.c570 行で定義されています。

参照先 BOOL, と FALSE.

参照元 CheckMMX().

00570                           {
00571   return FALSE;
00572 }

DKC_EXTERN BOOL WINAPI dkcIsNativePathString const char *  s,
size_t  size
 

FALSEならNativeなファイルパスではない。.

dkcOSIndependent.c14 行で定義されています。

参照先 dkcmIS_INVALID_PATH_CHAR, edk_FAILED, FALSE, NULL, と TRUE.

参照元 dkcAllocPathString(), dkcIsEffectivePath(), dkcPathStringElementInsert_Logic(), と dkcPathStringElementReplace_Logic().

00014                                                            {
00015 
00016     size_t i=0;
00017     if(s==NULL) return edk_FAILED;
00018     for(;i<size;i++){
00019         if(dkcmIS_INVALID_PATH_CHAR(s[i]))
00020         {
00021             return FALSE;
00022         }
00023     }
00024     return TRUE;
00025 }

DKC_EXTERN int WINAPI dkcLoadBinary void *  data,
size_t  size,
const char *  fname,
size_t *  readsize
 

バイナリデータをメモリに読み込む。dkcSaveBinary()と対

dkcOSIndependent.c390 行で定義されています。

参照先 dkcLoadFile().

参照元 dkcAllocDeserialize(), と dkcFileCopyEx().

00390                                                                                    {//="rb"
00391     return dkcLoadFile(data,size,fname,"rb",readsize);
00392 }

DKC_EXTERN int WINAPI dkcLoadText char *  text,
size_t  length,
const char *  fname,
size_t *  readsize
 

テキストデータをメモリに読み込む。dkcSaveText()と対

dkcOSIndependent.c397 行で定義されています。

参照先 dkcLoadFile().

00397                                                                                    {
00398     return dkcLoadFile(text,length,fname,"rt",readsize);
00399 }

DKC_EXTERN int WINAPI dkcReallocate void **  NewPtr,
size_t  NewSize,
void **  OldPtr
 

dkcOSIndependent.c176 行で定義されています。

参照先 dkcReallocateEx().

参照元 dkcBufferResize(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamResize(), dkcQueueDynamicPush(), dkcSingleListSetBuffer(), と dkcStackDynamicPush().

00178 {
00179     return dkcReallocateEx(realloc,NewPtr,NewSize,OldPtr);
00180 }

DKC_EXTERN int WINAPI dkcReallocateAutoExpand DKC_REALLOC_F_TYPE  your_realloc,
void **  NewPtr,
void **  OldPtr,
size_t  OldSize,
size_t *  reallocated_size
 

引数:
your_realloc[in] reallocする関数
NewPtr[out] 新しいメモリ空間アドレス
OldPtr[in][out] 古いメモリ空間アドレス。関数が成功すると、OldPtrは無効になる
OldSize[in] OldPtrのサイズ
reallocated_size[out] 確保したサイズ
覚え書き:
メモリサイズ拡張専用

dkcOSIndependent.c207 行で定義されています。

参照先 DKC_REALLOC_F_TYPE, dkcReallocateSizeFunction(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, と NULL.

00211 {
00212     void *ptr = NULL;
00213     size_t want_size = OldSize / 8;
00214     size_t ra_size = dkcReallocateSizeFunction(OldSize,
00215          (want_size <= 20) ? 20 : want_size
00216     );
00217     size_t div = 8;
00218     size_t tmp_ra = ra_size / div;
00219     size_t i;
00220     if(NULL== your_realloc /*|| NULL==*NewPtr*/ || NULL == *OldPtr ||
00221         0==OldSize  || NULL==reallocated_size   
00222     ){
00223         return edk_ArgumentException;//アホ引数入れるな!!
00224     }
00225 
00226     for(i=0;i<div;i++){
00227         ptr = your_realloc(*OldPtr,ra_size);
00228         if(NULL==ptr){
00229             if(OldSize > (ra_size -= tmp_ra)){//とりあえずtmp_ra分を引く。
00230                 break;//こら望みなしだわ
00231             }
00232             continue;
00233         }else{
00234             break;
00235         }
00236     }
00237     if(NULL==ptr) return edk_FAILED;
00238 
00239     //更新
00240     *NewPtr = ptr;  
00241     *OldPtr = NULL;
00242 
00243     *reallocated_size = ra_size;
00244 
00245     return edk_SUCCEEDED;
00246 }

DKC_EXTERN int WINAPI dkcReallocateEx DKC_REALLOC_F_TYPE  your_realloc,
void **  NewPtr,
size_t  NewSize,
void **  OldPtr
 

edk_SUCCEEDEDだったら成功

引数:
your_realloc[in] reallocする関数
NewPtr[out] 新しいメモリ空間アドレス
NewSize[in] 新しいメモリ空間アドレスのサイズ。
OldPtr[in][out] 古いメモリ空間アドレス。関数が成功すると、OldPtrは無効になる
OldSize[in] OldPtrのサイズ

dkcOSIndependent.c182 行で定義されています。

参照先 DKC_REALLOC_F_TYPE, edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, と NULL.

参照元 dkcReallocate().

00186 {
00187     void *ptr = NULL;
00188 
00189     if(NULL== your_realloc  /*|| NULL == *OldPtr ||
00190         0==OldSize*/
00191     ){
00192         return edk_ArgumentException;//アホ引数入れるな!!
00193     }
00194 
00195     ptr = your_realloc(*OldPtr,NewSize);
00196     if(NULL==ptr) return edk_FAILED;
00197 
00198     //更新
00199     *OldPtr = NULL;
00200     *NewPtr = ptr;
00201     
00202     return edk_SUCCEEDED;
00203 }

DKC_EXTERN size_t dkcReallocateSizeFunction size_t  OldSize,
size_t  ExpandSize
 

dkcOSIndependent.c158 行で定義されています。

参照元 dkcMemoryStreamAutoExpandResize(), dkcQueueDynamicPush(), dkcReallocateAutoExpand(), と dkcStackDynamicPush().

00158                                                                   {
00159     //y=-25.43035 * pow(x,2) + 116.7214
00160     //y = -0.00000018 * pow(x,2) + 0.00019
00161     //y = -99.9999 * pow(OldSize,2) + 104857600;
00162     //y = 0.105263 * x * x + 10.52631
00163     //double x;
00164 //  size_t size;
00165     if(OldSize <= 1024 * 5){//5KB以内なら2倍
00166         return OldSize * 2;
00167     }else if(OldSize >= 1024 * 1024 * 10 || 0==OldSize)
00168     {//10MB以上なら + ExpandSize
00169         return OldSize + ExpandSize;
00170     }
00171     //それ以外ならExpandSize * 3
00172     return OldSize + ExpandSize * 3; 
00173     //return OldSize * 2;//ひでぇ関数だ。
00174 }

DKC_EXTERN USHORT dkcReverseEndian16 USHORT  x  ) 
 

endian change 16 bit version

dkcOSIndependent.c576 行で定義されています。

参照先 DKC_INLINE.

参照元 dkcStreamProcess16().

00576                                               {
00577     return (USHORT)((x >> 8) | (x << 8));
00578 }

DKC_EXTERN ULONG dkcReverseEndian32 ULONG  x  ) 
 

General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より.

参照元 dkcReverseEndian64(), dkcStreamProcess32(), GetHeader(), HeaderWrite(), ReverseEndian(), と ReverseEndianDWORD().

DKC_EXTERN ULONGLONG dkcReverseEndian64 ULONGLONG  x  ) 
 

General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より.

dkcOSIndependent.c584 行で定義されています。

参照先 DKC_INLINE, dkcReverseEndian32(), DWORD, と ULONGLONG.

参照元 dkcStreamProcess64(), GetHeader(), HeaderWrite(), と ReverseEndianQWORD().

00584                                                      {
00585 
00586     return (
00587         (ULONGLONG)dkcReverseEndian32((DWORD)(x & 0x00000000ffffffff)) << 32)
00588         | 
00589         dkcReverseEndian32((DWORD)(x >> 32)
00590     );
00591 
00592 }

DKC_EXTERN int WINAPI dkcSaveBinary const void *  data,
size_t  size,
const char *  fname
 

fopenのファイル関数を使ってバイナリセーブを行う。

dkcOSIndependent.c377 行で定義されています。

参照先 dkcSaveFile().

参照元 dkcCircularStreamDump(), dkcFileCopyEx(), と dkcFreeSerialize().

00377                                                                         {//="wb"
00378     return dkcSaveFile(data,size,fname,"wb");
00379 }

DKC_EXTERN int WINAPI dkcSaveText const char *  text,
size_t  length,
const char *  fname
 

fopenでテキストセーブを行う

dkcOSIndependent.c394 行で定義されています。

参照先 dkcSaveFile().

00394                                                                         {
00395     return dkcSaveFile(text,length,fname,"wt");
00396 }

DKC_EXTERN int WINAPI dkcSelect void *  dest,
const void *  a_src,
size_t  n,
int  k,
size_t  width,
DKC_COMPARE_TYPE  less
 

いわいるセレクト(選択)アルゴリズム

n:配列の再台数 k:調べたい番号(小さいうちから)

戻り値:
offset number ,Error : UINT_MAX

dkcOSIndependent.c610 行で定義されています。

参照先 DKC_COMPARE_TYPE, dkcSwapFast(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, get_offset(), と NULL.

参照元 dkcSelectMax(), と dkcSelectMin().

00611 {
00612 
00613     int i,j,left, right;
00614 
00615     void *x = malloc(width);
00616     void *a = malloc(n * width);
00617     if(NULL==x || NULL==a){
00618         return edk_ArgumentException;
00619     }
00620     if(n > INT_MAX){
00621         return edk_FAILED;
00622     }
00623     
00624 
00625     memcpy(a,a_src,width * n);
00626 
00627 
00628     left = 0;  right = n - 1;
00629 
00630     while (left < right) 
00631     {
00632 
00633         memcpy(x,   (const void *)get_offset(a,k * width),width);
00634         i = left;
00635         j = right;
00636 
00637         for ( ; ; ) {
00638 
00639             while( less(get_offset(a,i * width),x) > 0){
00640             //while( *(int *)get_offset(a,i * width) < *(int *)x){
00641                 i++;
00642             }
00643 
00644             while( less(x,get_offset(a,j * width)) > 0){
00645             //while( *(int *)x < *(int *)get_offset(a,j * width) ){
00646                 j--;
00647             }
00648 
00649             if (i > j){
00650                 break;
00651             }
00652             
00653 
00654             dkcSwapFast(
00655                 get_offset(a,i * width),
00656                 get_offset(a,j * width),
00657                 width
00658                 );
00659             
00660             i++;
00661             j--;
00662         }
00663         if (j < k){
00664             left  = i;
00665         }
00666         if (k < i){
00667             right = j;
00668         }
00669     }
00670 
00671     //ゲットする
00672     {
00673         //printf("%d",*(int *)get_offset(a,k * width));
00674 
00675         memcpy(dest,(const void *)get_offset(a,k * width),width);
00676 
00677     }
00678     free(x);
00679     free(a);
00680 
00681     return edk_SUCCEEDED;
00682 
00683 }

DKC_EXTERN int WINAPI dkcSelectMax void *  dest,
const void *  a,
size_t  n,
size_t  width,
DKC_COMPARE_TYPE  comp
 

最大値を選択する

参照:
dkcSelect() の 引数kが無いだけ

dkcOSIndependent.c686 行で定義されています。

参照先 DKC_COMPARE_TYPE, DKC_INLINE, dkcSelect(), と edk_FAILED.

00686                                                                                                            {
00687     if(n-1 > INT_MAX){
00688         return edk_FAILED;
00689     }
00690     return dkcSelect(a,a_src,n,(int)n-1,width,less);
00691 }

DKC_EXTERN int WINAPI dkcSelectMin void *  dest,
const void *  a,
size_t  n,
size_t  width,
DKC_COMPARE_TYPE  comp
 

最小値を選択する

参照:
dkcSelect() の 引数kが無いだけ

dkcOSIndependent.c692 行で定義されています。

参照先 DKC_COMPARE_TYPE, DKC_INLINE, と dkcSelect().

00692                                                                                                            {
00693     return dkcSelect(a,a_src,n,(int)0,width,less);
00694 }

DKC_EXTERN void WINAPI dkcSwap void *  p1,
void *  p2,
size_t  size
 

演算でSwapさせる。SWAP_NUM()マクロを参照。

dkcOSIndependent.c486 行で定義されています。

参照先 dkcSwap64(), と ULONGLONG.

参照元 dkcBubbleSort(), dkcCombSort(), と dkcShellSort().

00487 {
00488     dkcSwap64((ULONGLONG *)p1,(ULONGLONG *)p2,size);
00489 }

DKC_EXTERN void WINAPI dkcSwap64 ULONGLONG *  p1,
ULONGLONG *  p2,
size_t  size
 

引数:
p1[in] ULONGLONG *のバッファへのポインタ
p2[in] ULONGLONG *のバッファへのポインタ
size[in] p1,p2バッファのサイズ
覚え書き:
p1,p2共にULONGLONG *に強制型キャストしてください。

dkcOSIndependent.c451 行で定義されています。

参照先 BYTE, SWAP_NUM, と ULONGLONG.

参照元 dkcSwap().

00451                                                               {
00452     size_t i;
00453     BYTE buf;
00454     size_t mod_ = size % sizeof(ULONGLONG);
00455     size_t cnt = size / sizeof(ULONGLONG);
00456     //char *tp1 = (char *)p1,*tp2 = (char *)p2;
00457     for(i=0;i<cnt;i++){
00458         SWAP_NUM(p1[i],p2[i]);
00459     }
00460     for(i=0;i<mod_;i++){
00461         
00462         //SWAP_NUM((char)tp1[size - mod_ + 1],(char)tp2[size - mod_ + i]);
00463         /*a = b - a ;\
00464     b -= a ;\
00465     a += b
00466         */
00467         /*( ( ((char *) p2)[size - mod_ + i]))
00468             = (char)( ( ((char *) p2)[size - mod_ + i])) - 
00469             (char)( ( ((char *) p1)[size - mod_ + i]));
00470         
00471         ( ( ((char *) p2)[size - mod_ + i])) -= ( ( ((char *) p1)[size - mod_ + i]));
00472 
00473         ( ( ((char *) p1)[size - mod_ + i])) += ( ( ((char *) p2)[size - mod_ + i]));
00474             */
00475         
00476         
00477         buf = (((BYTE *)p1)[size - mod_ + i]);
00478         (((BYTE *)p1)[size - mod_ + i]) = 
00479             (((BYTE *)p2)[size - mod_ + i]) ;
00480         (((BYTE *)p2)[size - mod_ + i]) = buf;
00481         
00482     }
00483 
00484 }

DKC_EXTERN void WINAPI dkcSwapFast void *  p1,
void *  p2,
size_t  size
 

どんな方法でもいいからともかく速くSwapさせる。

覚え書き:
size分のメモリを動的確保してスワップします。

dkcOSIndependent.c401 行で定義されています。

参照先 dkcmNOT_ASSERT, と NULL.

参照元 dkcSelect().

00402 {
00403     void *p = malloc(size);
00404     dkcmNOT_ASSERT(NULL==p);
00405     memcpy(p,p1,size);
00406     memcpy(p1,p2,size);
00407     memcpy(p2,p,size);
00408     free(p);
00409 }

DKC_EXTERN void WINAPI dkcTwoDWORDToULONGLONG ULONGLONG *  dest,
DWORD  high,
DWORD  low
 

dkcOSIndependent.c493 行で定義されています。

参照先 ULONGLONG.

00493                                                                         {
00494     //*dest = (ULONGLONG)((high << 32) + low);
00495     *dest = (ULONGLONG)high << 32;
00496     *dest += low;
00497         //( high * MAXDWORD ) + low;
00498 }

DKC_EXTERN void WINAPI dkcULONGLONGToTwoDWORD DWORD *  dhigh,
DWORD *  dlow,
ULONGLONG  src
 

dkcOSIndependent.c500 行で定義されています。

参照先 dkcmNOT_ASSERT, DWORD, と ULONGLONG.

00500                                                                           {
00501     DWORD *o = (DWORD *)&src;
00502     dkcmNOT_ASSERT(sizeof(DWORD) * 2 != sizeof(ULONGLONG));
00503     //エンディアン問題をどうにかしよう!
00504     *dhigh = o[0];
00505     *dlow = o[1];
00506 }


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