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

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.h の 214 行で定義されています。

#define DKC_EXTERN   DKUTIL_EXTERN
 

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

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

#define DKC_IMPORT
 

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

#define DKC_INLINE
 

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

参照元 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.h の 238 行で定義されています。

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

#define dkcdMAXPATH_BUFFER   dkcdMAXPATH * 2
 

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

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

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

#define dkcdMAXPATH_LEN   dkcdMAXPATH
 

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

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

#define dkcdPATH_LIST_SEP   ':'
 

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

#define dkcdPATH_LIST_SEP_STR   ":"
 

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

#define dkcdPATH_SEP   '/'
 

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

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

#define dkcdPATH_SEP_STR   "/"
 

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

参照元 dkcPathStringNormalizeConcatenateLogic().

 
#define dkcIsBigEndian (   )     (!dkcIsLittleEndian())
 

big endianならTRUE

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

#define dkcmASSERT (  ex   )     ((void)0)
 

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

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

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

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

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

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

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

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

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

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

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

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

#define dkcmIS_INVALID_FILENAME_CHAR (  c   ) 
 

値:

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

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

#define dkcmIS_INVALID_FOLDERNAME_CHAR (  c   )     dkcmIS_INVALID_FILENAME_CHAR(c)
 

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

参照元 dkcCreateDirectory().

#define dkcmIS_INVALID_PATH_CHAR (  c   ) 
 

値:

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

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

参照元 dkcIsNativePathString().

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

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

参照元 dkcCreateDirectory().

#define dkcmNOT_ASSERT (  ex   )     ((void)0)
 

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

参照元 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.h の 455 行で定義されています。

参照元 dkcCreateDirectory().

#define FALSE   0
 

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

参照元 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.h の 36 行で定義されています。

#define LONGLONG_MAX   DKINGYO_LONGLONG_MAX
 

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

#define LONGLONG_MIN   DKINGYO_LONGLONG_MIN
 

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

#define MAYBE   2
 

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

#define NULL   0
 

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

参照元 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.h の 51 行で定義されています。

参照元 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.h の 32 行で定義されています。

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

#define ULONGLONG_MAX   DKINGYO_ULONGLONG_MAX
 

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


型定義

typedef int BOOL
 

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

参照元 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.h の 81 行で定義されています。

参照元 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.h の 487 行で定義されています。

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

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

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

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

typedef unsigned long long QWORD
 

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

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


関数

DKC_EXTERN void* WINAPIV dkcAllocate (  size_t  size  ) 
 

dkcOSIndependent.c の 108 行で定義されています。

参照先 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.c の 524 行で定義されています。

参照先 BOOL.

00524                                          {
00525 
00526 }

DKC_EXTERN BOOL WINAPI dkcCreateEmptyFile (  const char *  filename  ) 
 

空ファイルを作る。

dkcOSIndependent.c の 381 行で定義されています。

参照先 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.c の 28 行で定義されています。

参照先 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.c の 281 行で定義されています。

参照先 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.c の 277 行で定義されています。

参照先 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.c の 287 行で定義されています。

参照先 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.c の 115 行で定義されています。

参照先 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.c の 331 行で定義されています。

参照先 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.c の 529 行で定義されています。

参照先 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.c の 121 行で定義されています。

参照先 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.c の 593 行で定義されています。

参照先 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.c の 570 行で定義されています。

参照先 BOOL, と FALSE.

参照元 CheckMMX().

00570                           {
00571   return FALSE;
00572 }

DKC_EXTERN BOOL WINAPI dkcIsNativePathString (  const char *  s,
size_t  size
) 
 

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

dkcOSIndependent.c の 14 行で定義されています。

参照先 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.c の 390 行で定義されています。

参照先 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.c の 397 行で定義されています。

参照先 dkcLoadFile().

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

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

dkcOSIndependent.c の 176 行で定義されています。

参照先 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.c の 207 行で定義されています。

参照先 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.c の 182 行で定義されています。

参照先 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.c の 158 行で定義されています。

参照元 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.c の 576 行で定義されています。

参照先 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.c の 584 行で定義されています。

参照先 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.c の 377 行で定義されています。

参照先 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.c の 394 行で定義されています。

参照先 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.c の 610 行で定義されています。

参照先 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.c の 686 行で定義されています。

参照先 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.c の 692 行で定義されています。

参照先 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.c の 486 行で定義されています。

参照先 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.c の 451 行で定義されています。

参照先 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.c の 401 行で定義されています。

参照先 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.c の 493 行で定義されています。

参照先 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.c の 500 行で定義されています。

参照先 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