/*!

@mainpage	dkutil

@section	summary	概要

dKingyo Utility Toolkitの核を成すライブラリ。
Win32系の機能のラッパーと汎用コンテナ、アルゴリズムで構成されている。

@section	strategy	方針

-# 文字列処理においてSJIS系の日本語文字にはかなり考慮されている
-# ポリシークラスにてパズルみたいに機能を組み合わせていく系の機能
-# 抽象クラスを使った昔風オブジェクト指向の機能
-# 抽象クラス（virtual の関数とか )の引数の型はPOD ( C言語でも使える型 ) のみ（の予定だったが無理そうなので止めた。）
-# virtual系メンバ関数の入っている抽象クラスの名前の接頭辞にはIがついている。
-# virtual系メンバ関数の入っている抽象クラスからの派生クラスの名前の接頭辞にCがついている。


<h5>共通事項メモ</h5>
- 主に、"interface"がクラス名に入っているクラスはインターフェイスクラスである。
- bool または BOOL が戻り値の型に指定されていたら戻り値の意味は true で成功 false で 失敗 である。
- 基本的にDLLExportする抽象クラスはPOD型を使う。

<h5>FAQ</h5>
<PRE>
Q.何故、dkutilフォルダ内にboostが存在するのですか？
A.VC6でもコンパイルできるバージョンのboost spiritライブラリを使用する為です。
また、boost/shared_array.hpp等のライブラリを使うためです。
</PRE>

@section	history 更新履歴
<PRE>
2006/05/24:
	signatureにripemd.hpp whirlpool.hppを追加。
2006/05/24:
	signatureにripemd.hpp whirlpool.hppを追加。
2006/02/15:
	dKingyoProgressDialog.dllのメッセージ処理をちょこっと改良。
	policy/array_to_string.hppを追加。
	scoped_buffer.hppのto_string()の実装を変更。
	GeneralPurposeVariableのgetForceString()を名前の通り無理やり文字列に変換させるようにした。const修飾子が外れた。
	
2006/02/06:
	確かこのあたりからgui/win32内でdKingyoProgressDialog.dllを作り始めた。
2005/12/16:
	signatureにmd4.hppを追加。
2005/11/29:
	dktlにいろいろ追加した。が、多分n_tree.hppとかは削除する予定。
	dictionary.hppが完成。多分バグはない。
2005/11/27:
	cryptograph/buffer.hppを作成。暗号化済みバッファとして動作する予定。
	scoped_textfile_bufferの最後のNULL文字を上手く挿入出来ていなかった問題を修正。
2005/11/25:
	dkcStream.hppをてこ入れ。64bit対応に。
2005/11/20:
	stream_interfaceクラスににtext_read_functorクラスおよびtext_all_read()関数を実装した。
2005/11/16:
	process.hppを作った。scoped_current_process_priorityおよびscoped_current_thread_priorityを実装。
2005/10/22:
	buffer.hppにbuffered_interfaceクラスを作った。が 作りかけ
2005/10/22:
	detailにconvert_serialize_interface.hppを作ってserialize_interface.hppに定義されていたIConvertSerializeStreamをそちらにうつした。
	convert_interface.hppがVCのエラーによって上書きされて消えた。よって書きなおし中。(ToT)
2005/10/15:
	detailにstream_interface.hppに定義されていたfunctor群を新しいファイルstream_functor.hppに移動させた。
	IStreamCodingという抽象クラスをdetail/stream_coding_interface.hppに作った。
	
2005/10/12:
	archive/interface.hppのインターフェイス部分の設計を見直し、
	アーカイブへの要素の登録部分改良を加えることが必要な事に気づいた。
	IConvertStreamの仕様や圧縮、暗号化を行っている部分のインターフェイスの統一も必要な気がしてきた。
2005/10/11:
	archive/professional.hppを製作中
	archive/pack.hppの内部構造を見直す
2005/10/08:
	archive/pack.hppが一通り完成。
	archive/extract.hppを追加。
	memory/circuler_stream.hpp memory/memory_stream.hppを追加
2005/10/07:
	detail/convert_interface.hppを作成
	archive/future.hppが完成
2005/09/29:
	signature/in_a_mass.hppを作成。これによりまとめてシグネチャを計算できる。
	archive/future.hppをちょっといじる。
2005/09/28:
	archiveに多数ファイルを作成。archive/basic.hppは大丈夫らしい。
	 archive/future.hppをいじった。archive/reserve.hpp完成。
	signature/signature_buffer.hppを作成。完成。
	filesystem/xml_save.hppを作成。
	parser/text_save.hppをfilesystem/text_save.hppに移動
	
2005/09/26:
	stream_interfaceに定義してあったdiv_read_each() div_wrtie_each()を外部クラスのfunctorにした。
	IStream,ISerializeStreamやIFileStream等がちょっと関数定義や呼び出しが間違っているためか、
	どうもそれらを継承しているクラスがpure virtual function callをしてしまうため、archive/basic.hppで使用する
	ストリームをbig_filestreamにしてfilestream_interfaceにISerializeStreamを継承した。
2005/09/24:
	smart_ptr.hppをsmart_ptrs.hppにその中にshared_bufferを追加した。
	scoped_bufferにboost::noncopyableを付けた。
	archiveフォルダを作った。独自アーカイブルーチンを書くつもり。
	filesystem/utility.hppのwin32依存関数をfilesystem/win32_utility.hppに移した。
	IStreamインターフェイスのsize_typeを明示的にsize_type64とsize_type32に分けた。
	size_typeはunsigned intに依存する形にした。
	big_filestreamのtell()のSetFilePointer()の戻り値チェックをMSDNどおりに行うようにした。
	IFileStreamのserializeがwrite時にしかエンディアンチェンジしないバグを修正
2005/08/02:
	cryptographにsnow2.hpp hc256.hppを追加した。
	
2005/03/15:
	synchronizedをscoped_criticalsectionとしてtypedefした。
2005/02/22:
	parser/commandline.hppのCommandLineParserを書きなおした。
	多分、バグは無いような気もするが･･･ \\対策とか SJIS対策とかは･･･spaceとダブルクぉーとはSJISに被らなかったはず･･･
2004/12/10:
	cryptograph/blowfish.hpp、compression/lzss.hppのテスト終了
	cryptograph/arcfour.hppを追加
	ranking_timerにget_csv_result()のCSV区切りをダブルクォートで囲むように設定
2004/12/09:
	policy/allocator.hppのmalloc,free,reallocの三つをconstからstatic inline に変更
	memory/object_pool.hppを追加
	timer.hppのranking_timerにget_csv_result()を追加
		それにともないクラス内のメンバ関数の部構成を更新 
2004/12/02:
	dkutilライブラリはコンパイルしなくては使えないライブラリも含める事にした。(dkutil_gui_win32)
	filesystem/current_dir.hpp
	filesystem/ext.hpp
	filesystem/filefind.hpp
	を追加。
2004/11/21:
	dkutilライブラリを使用するのに必要なboostのバージョンが1.32.0になった。
	http://www.boost.org	
	しかし、VC6では依然 1.30.2である。
2004/11/11:
	Gimite氏製作のPublic Domainなソース socket.hをnetwork/tcp.hppがインクルードするようにした。
2004/10/26:
	parserにcsv.hppを追加した。SJISに完全対応していないと思う。
2004/10/23:
	compressionの各種処理を変えた。CRLE_PackBitsをとりあえず動く形にした。
	IArrayProcessのインターフェイスを変えた。
	big_filestreamのerror()の処理の不具合を直した。（GetLastError()の呼び出し位置が間違ってた。）
	
2004/09/22:
	tcpstreamのフォルダ構成を変更 dkutilフォルダ内から削除
	
2004/09/20:Version1.10 リリース前 004
	tcpstreamの移植作業開始
	graphics系アルゴリズム追加
	time.hppを追加
	

2004/09/18:
	nyslのgapbufferを一通りバグ潰し
	text_edit_bufferをgapbufferでどうにかできるかイロイロ試行錯誤する。
	参考サイト：http://www.kmonos.net/wlog/39.php
	
2004/09/08:Version1.10 リリース前 003
	dkutil/registration.hpp を追加
	test/dkutil/signature/sha256.cpp を追加
	                      crc.cpp を追加
	CLzssをCLZSSに名前を変更
	諸所の#include " ... "を #include < ... > 形式にした。
</PRE>
@todo
<PRE>
2006/05/28:
	様々なクラスやファイルが乱立してテストしきれていない。テストしなければ！！
2005/11/29:
	buffer.hppに定義してあるクラスを使えるレベルにしよう！
2005/09/25:
	CLittleEndianFileStreamがデストラクタ時にエラーになる。pure virtual function callらしい。
	しかし、どこがバグっているのか分からない。もしかしたら内部クラスをgetBase()で取得してFUNCTORかましとるのがいけないのだろうか？
2005/09/24:
	filestream系にread_mode時のwrite()のチェック （同様に逆の状態も）を忘れていた。後で直す。
2005/04/04:
	SET_VA_LIST_INSERT_YEN_N()マクロにバグを発見 orz
2005/03/09:
	dMB()の引数をchar *からconst char *化
2005/03/07:
	filesystem/path_string.hppはちとバグ持ち･･･
2004/10/31:
	undo の完全実装
	serialize系をどうにかする
	compression系のインターフェイスを統一する
	cryptograph系のインターフェイスを統一する
	crc系種別分け
	undoが完成すればtext_edit_bufferが完成する。（ハズ･･･）
	gui/select.hppのメンテナンス
	
	

2004/09/20:Version1.10 リリース前 004
	tcpstreamの完全移植
	text_edit_bufferの実装
	crc系の種別分け
	その他諸々(´Д⊂ｸﾞｽﾝ
	
2004/09/08:Version1.10 リリース前 003
	crcのタイプ識別をする。
	crc系のテーブル値を最初からテーブルとして用意するかどうか迷っている。
	detail::crc16_ccitt_ ... 系の出力バグらしきものを潰す
	どこかにx86アセのCRC落ちてないかナァ？（他力本願！？）
</PRE>


@section	attention 使用上の注意
- ライセンスをよく読んで御使用ください。（まぁ、普通に使う限りライセンスを違反するような事はないと思うけど）
- using namespace stdやusing namespace dkutil等はすべてのインクルードを終えてから行ってください。
- 
@section	license	ライセンス


<PRE>
dkutilはBSD LicenceまたはGNU LESSER GENERAL PUBLIC LICENSE(LGPL)です。
<b>dkutil Copyright (c) 2003-, dKingyo (studiokingyonet@users.sourceforge.jp)</b>
All rights reserved.

正式な文章は英語版の方を見てください。あくまで日本語訳は参考程度に＾＾；
--------------------------------------------------------------------
BSDL
日本語訳
http://www.ascii.co.jp/pb/ptex/etc/COPYRIGHT-jis.txt
--------------------------------------------------------------------
LGPL
日本語訳
http://www.opensource.jp/lesser/lgpl.ja.html
--------------------------------------------------------------------
d金魚の独断的ライセンス解釈（あまり参考にしないでください。）
http://studiokingyo.fc2web.com/dxlib/shiryou/LicenceData.html
--------------------------------------------------------------------
dkutil Tutorial (dkutilの正式なチュートリアル文章です。
詳しくはこちらに書いています。
http://studiokingyo.fc2web.com/dxlib/tutorial/dkutil_tutorial.html
</PRE>


<b>dkutilライブラリには一部にLunaのソースコードを使用しています。</b>
Lunaはdkutilと同じ、BSD Licenceの元に配布しています。
<PRE>

　BSDライセンスの元に本ソフトウェアを配布いたします。

　DirectX Library "Luna for DirectX 9.0c"
　Copyright (C) 2003-2004 葉迩倭
　All rights reserved.

　・もし下記条件が満たされれば、修正の有無に関わらず、
　　ソースまたはバイナリ形式での再配布および使用を許可します。

　・ソースコードで再配布する場合は、上記の著作権表示、
　　これらの条項、下記の免責事項を含めること。

　・バイナリ形式で再配布する場合は、上記の著作権表示、これらの条項、
　　下記の免責事項を、配布物とともに提供される文書および/または他の資料に必ず含めること。

　・本ソフトウェアは無保証です。自己責任で使用してください。

　・特別の許可が無くては、このソフトウェアから派生した製品の推奨や宣伝に、
　　私の名前やその貢献者の名前を使用してはいけない。
</PRE>

<b>dkutilライブラリには一部にGameCatapultのソースコードを使用しています。</b>
<PRE>
GameCatpult License
-----------
Copyright 2001-2003 SAM <sowwa@water.sannet.ne.jp>. All rights reserved.

ソースコード形式であれバイナリ形式であれ、
あるいは本ソフトウェアを使用して製作した応用ソフトウェアは、
変更の有無に関わらず、以下の条件を満たす限りにおいて、
再配布および使用を許可します。

・再配布・利用条件
ソースコード形式で再配布する場合、
上記著作権表示、 本条件書および下記責任限定規定を必ず含めてください。

バイナリ形式で再配布する場合、
上記著作権表示、本条件書および下記責任限定規定を、
配布物とともに提供される文書と、もしあれば他の資料も、必ず含めてください。

応用ソフトウェア（本ソフトウェアを使用して製作したソフトウェア）は、
静的リンクであれ動的リンクであれ、
本ソフトウェア当該部分の著作権はSAMに帰属しますが、
応用ソフトウェアそのものの著作権は応用ソフトウェア製作者に帰属するものとし、
応用ソフトウェアに上記著作権表示、
本条件書および下記責任限定規定を同梱する義務無しに配布することが出来るものとします。

・免責事項
本ソフトウェアは SAM によって、“現状のまま”提供されるものとします。
本ソフトウェアについては、明示的･暗黙的を問わず、
商用品として通常そなえるべき品質をそなえているという保証も、
特定の目的に適合するという保証を含め、何の保証もなされません。
事由のいかんを問わず、損害発生の原因いかんを問わず、
且つ、責任の根拠が契約であるか厳格責任であるか (過失その他) 不法行為であるかを問わず、
SAM も寄与者も、仮にそのような損害が発生する可能性を知らされていたとしても、
本ソフトウェアの使用から発生した直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害または結果損害のいずれに対しても
 (代替品またはサービスの提供、使用機会、データまたは利益の損失の補償、または、業務の中断に対する補償を含め) 
責任をいっさい負いません。

(end of COPYRIGHT)
</PRE>


<b>dkutilライブラリには一部にtcpstreamのソースコードを使用しています。</b>
<PRE>
<b>tcpstream Copyright (c) 2004, yuno</b>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the name of the copyright holder nor the names of its contributors
  may be used to endorse or promote products derived from this software
  without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</PRE>
*/