

#ifndef _DKUTIL_STDAFX__
#define _DKUTIL_STDAFX__

//ちと以下のは気にしないどいて･･･
//このdefineが定義されていると#include "stdafx.h"を使用することになる。
//dkutilプロジェクトにはデフォルトのプリプロセッサとして定義されている。
//#define DKUTIL_LIB_BUILD


#include "dkutilCompileOption.h"

#if defined(USE_DKINGYO_INCLUDE_SETTING_LIKE_BOOST)
#	include <dkutil/config/dkutilConfig.h>
#else
#	if defined(DKUTIL_COMPILE_OPTION_MSVC)
#		include "config/dkutilConfig.h"
#	else


#		include "dkutilConfig.h"
#	endif
#endif

//**********************************************************
//コンパイルオプションのエラーチェック
//**********************************************************
#ifdef USE_DKINGYO_OBJECT_TEST //テスト関数を使うのに･･･
#	ifndef USE_DKINGYO_MEMORYLEAK_CHECK //メモリリークチェックを有効にしていなかったら
#		error "If you use a USE_DKINGYO_OBEJCT_TEST option, please confirm USE_DKINGYO_MEMORYLEAK_CHECK."
#	endif
#endif



// For Windows
#ifdef _DEBUG
#	ifndef DEBUG
#		define DEBUG
#	endif
#endif
#ifdef _NDEBUG
#	ifndef NDEBUG
#		define NDEBUG
#	endif
#endif




//**********************************************************
//警告対策
//**********************************************************
#ifdef USE_DKINGYO_WARNING_MEASURE
#	ifdef DKUTIL_COMPILE_OPTION_MSVC
// 不要な警告を抑制
#	if _MSC_VER > 1000


#		pragma warning(disable : 4200)		// size 0 array (テンプレート引数で警告される)
#		pragma warning(disable : 4290)		// C++ 例外指定は無視される
#		pragma warning(disable : 4511)		// can't generate copy constructor (so what?)
#		pragma warning(disable : 4512)		// can't generator assign operator (so what?)
#		pragma warning(disable : 4710)		// function couldn't be inlined
#		pragma warning(disable : 4786)		// truncate debug symbol

#	endif // _MSC_VER > 1000
#	endif
#endif // end of USE_DKINGYO_WARNING_MEASURE





//**********************************************************
//STLPort関連の設定
//**********************************************************

#ifdef USE_DKINGYO_STLPORT //STLPortを使います！！

//STLPortのセッティングをする
	#ifdef USE_DKINGYO_INCLUDE_SETTING_LIKE_BOOST
	#	include <dkutil/include/dkutilSTLPortPolicy.h>
	#else
	#	if DKUTIL_COMPILE_OPTION_MSVC
	#		include "include/dkutilSTLPortPolicy.h"
	#	else
	#		include "dkutilSTLPortPolicy.h"
	#	endif
	#endif



#	if defined(USE_DKINGYO_MEMORYLEAK_CHECK) && defined(_DEBUG)
// STLport の node allocator を使うと、誤まってリークが報告されてしまうため
#		define _STLP_USE_MALLOC
#	endif


#else//STLPortじゃないなら･･･


#endif //end of USE_DKINGYO_STLPORT 



//**********************************************************
//ブースト軍
//**********************************************************
//ぶうすと使います〜〜
//http://www.boost.orgにあるC++用便利かつ最高なライブラリ群です。
//#include <boost/config.hpp>
#if DKUTIL_COMPILE_OPTION_MSVC
#		include "include/dkutilBoostPolicy.h"
#elif defined(USE_DKINGYO_INCLUDE_SETTING_LIKE_BOOST)
#		include <dkutil/include/dkutilBoostPolicy.h>
#endif
/*
#ifdef USE_DKINGYO_INCLUDE_SETTING_LIKE_BOOST
#	include <dkutil/include/dkutilBoostPolicy.h>
#else
#	if DKUTIL_COMPILE_OPTION_MSVC
#		include "include/dkutilBoostPolicy.h"
#	else
#		include "dkutilBoostPolicy.h"
#	endif
#endif
*/

//**********************************************************
//ロキ軍
//**********************************************************
//Loki使いまんせ〜〜
//http://www.moderncppdesign.com/ Modern C++ Designで有名なLokiです。
//ダウンロードはhttp://sourceforge.net/projects/loki-lib とかからです。
#if DKUTIL_COMPILE_OPTION_MSVC
#include "include/dkutilLokiPolicy.h"
#elif defined(USE_DKINGYO_INCLUDE_SETTING_LIKE_BOOST)
#include <dkutil/include/dkutilLokiPolicy.h>
#endif
//**********************************************************
//マルチスレッド,DLL等リンカ問題？？関連
//**********************************************************


#if defined(DKUTIL_BUILD) || defined(DKUTIL_BUILD_TEST)
#	if _MSC_VER >= 1200
//MSVC6用のリンカのポリシーを設定
#ifdef USE_DKINGYO_INCLUDE_SETTING_LIKE_BOOST
#	include <dkutil/include/dkutilMSVC6LinkerPolicy.h>
#else
#	if DKUTIL_COMPILE_OPTION_MSVC
#		include "include/dkutilMSVC6LinkerPolicy.h"
#	elif DKUTIL_COMPILE_OPTION_DEVCPP
#		include "dkutilMSVC6LinkerPolicy.h"
#	elif
#		include "dkutilMSVC6LinkerPolicy.h"
#	endif
#endif

#	endif
#endif //end of DKUTIL_BUILD etc...


//STLのインクルード

#ifdef USE_DKINGYO_INCLUDE_SETTING_LIKE_BOOST
#	include <dkutil/include/dkutilSTLInclude.h>
#else
#	if defined(DKUTIL_COMPILE_OPTION_MSVC)
#		include "include/dkutilSTLInclude.h"
#	else
#		include "dkutilSTLInclude.h"
#	endif
#endif






#ifndef USE_DKINGYO_STLPORT
#	ifdef _STLPORT_VERSION
#		error "USE_DKINGYO_STLPORT定義されてないのに、何故、STLPort使ってるん？"
#	endif
#else
#	ifndef _STLPORT_VERSION
#		error "USE_DKINGYO_STLPORTが定義されているのに、それが使われていない。"
#	endif
#endif






/*
#ifdef _DEBUG
#	define NO_LIBC "/NODEFAULTLIB:libc"
#	define NO_LIBCMT "/NODEFAULTLIB:libcmt"
#else
#	define NO_LIBC "/NODEFAULTLIB:libcd"
#	define NO_LIBCMT "/NODEFAULTLIB:libcmtd"
#endif

#pragma comment(linker, NO_LIBC)
#pragma comment(linker, NO_LIBCMT)
*/
/*
#if defined(_USEDLL) || defined(USE_DKINGYO_DLL_COMPILE)

#	pragma comment(linker,"/NODEFAULTLIB:libcmtd")
#	pragma comment(linker,"/NODEFAULTLIB:libcd")
#	pragma comment(linker,"/NODEFAULTLIB:libcmt")
#	pragma comment(linker,"/NODEFAULTLIB:libc")
#	ifdef _DEBUG
#		pragma comment(lib,"MSVCPRTD")
#	else
#		pragma comment(lib,"MSVCPRT")
#	endif
#endif
	*/


//**********************************************************
//メモリリーク関連の設定
//**********************************************************

#ifdef USE_DKINGYO_MEMORYLEAK_CHECK
#	if defined(DKUTIL_COMPILE_OPTION_MSVC)
#		include <crtdbg.h>
	// デバッグビルド時には、デバッグ用メモリアロケータを使う
# 	define _CRTDBG_MAP_ALLOC
#	endif
#endif



//**********************************************************
//基本的ヘッダ軍
//**********************************************************

#include <windows.h>
#include <math.h>
#include <LIMITS.H>
#include <time.h>
#include <tchar.h>
//#include <new>



#ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */
#include <io.h>
#include <fcntl.h>
#endif


//**********************************************************
//各種ライブラリ軍
//**********************************************************
//#pragma comment(lib,"winmm")


//**********************************************************
//ここらへんって32ビット環境依存だから＾＾；；；；；注意してね＾＾；；；
//**********************************************************

//定数を定義する
///ULONGLONGの変数のマックス値(最大値)
#define DKINGYO_ULONGLONG_MAX 18446744073709551615 
///LONGLONGの変数のマックス値(最大値)
#define DKINGYO_LONGLONG_MAX 9223372036854775807 
///LONGLONGの変数のミン値(最小値)
#define DKINGYO_LONGLONG_MIN -9223372036854775808 

#ifndef ULONGLONG_MAX
#	define ULONGLONG_MAX DKINGYO_ULONGLONG_MAX
#endif
#ifndef LONGLONG_MAX
#	define LONGLONG_MAX DKINGYO_LONGLONG_MAX
#endif
#ifndef LONGLONG_MIN
#	define LONGLONG_MIN DKINGYO_LONGLONG_MIN
#endif

#define UCHAR_MAX_STR "255" 
#define USHRT_MAX_STR "65535" 
///(signed)  short の最大値 の文字列
#define SHRT_MAX_STR "32767" 
/// (signed)  short の最小値 の文字列
#define SHRT_MIN_STR "-32768"
///(signed)  int の最大値の文字列
#define INT_MAX_STR "2147483647"
///(0xffffffff) unsigned int の最大値の文字列 
#define UINT_MAX_STR "4294967295"
///(0xffffffff) unsigned int の最大値 の文字列
#define ULONG_MAX_STR "4294967295"

#define LONGLONG_MAX_STR "9223372036854775807"

#define ULONGLONG_MAX_STR "18446744073709551615" 
/*
(0xffffffff) unsigned long の最大値 
INT_MAX 2147483647 (signed)  int の最大値 
INT_MIN -2147483647-1 (signed)  int の最小値 
LONG_MAX 2147483647 (signed)  long の最大値 
LONG_MIN -2147483647-1 (signed)  long の最小値 
*/





#endif //end of  _DKUTIL_STDAFX__ defined
