gintenlib-1.0.0-beta における収録ライブラリ一覧

スマートポインタ

new_
ヘッダ <gintenlib/new_.hpp> に収録。
指定された引数で new 演算子を呼び出し boost::shared_ptr に格納して返す関数です。
具体的には、 gintenlib::new_<typename>( argument-list ) というコードが boost::shared_ptr<typename>( new typename( argument-list ) ) と等価になります。
このライブラリを使用し new 演算子呼び出しを隔離することは、プログラムの例外安全性をより高めることにもなります。
また、あるオブジェクトを、 gintenlib::new_ を通してしか構築できないようにする、といった小技も使えます。
テストコード: tests/new_.cc
clonable_ptr
ヘッダ <gintenlib/clonable_ptr.hpp> に収録。
基本的にはノーマルな参照カウント式ポインタですが、コンストラクタで渡されたポインタの型を正確に記憶し、複製を作る機能を備えています。
また to_shared 関数により boost::shared_ptr に容易に変換できます。
テストコード: tests/clonable_ptr.cc
deep_ptr
ヘッダ <gintenlib/deep_ptr.hpp> に収録。
コピーされるたびに、保持するポインタの「深いコピー」を生成するスマートポインタです。
シンプルな機能ですが、継承関係にあるポインタに関連したバグを減らす為の工夫がなされています。
これも to_shared 関数により boost::shared_ptr に容易に変換できます。
テストコード: tests/deep_ptr.cc
move_ptr
ヘッダ <gintenlib/move_ptr.hpp> に収録。
swap 呼び出しと削除関数指定の出来る std::auto_ptr の微改良版です。
テストコード: tests/move_ptr.cc
to_shared
ヘッダ <gintenlib/to_shared.hpp>, <gintenlib/intrusive_to_shared.hpp> に収録。
std::auto_ptrboost::intrusive_ptr を(動作未確認ですが恐らく他のスマートポインタも) boost::shared_ptr に変換する関数 to_shared を提供します。
テストコード: tests/to_shared.cc

ユーティリティ

assign
ヘッダ <gintenlib/assign.hpp> に収録。
std::copy アルゴリズムの変形です。固定長配列に対しコピー操作を行う場合に使用できます。
テストコード: tests/assign.cc
cast
ヘッダ <gintenlib/cast.hpp> に収録。
よくある「暗黙キャストを明示的に行う」為のライブラリですが、かなり細かいところまで static_cast 等の組み込みキャストと似た動作を再現しています。
テストコードは用意し忘れたようですので、明日にでも随筆で説明します。
deleters
ヘッダ <gintenlib/deleter.hpp> に収録。
与えられた引数に対し単純に delete演算子を適用するだけの deletertyped_deleter 加え、与えられた引数に何もしない dummy_deletertyped_dummy_deleter が収録されています。
テストコード: tests/deleter.cc
factorize
ヘッダ <gintenlib/factorize.hpp> に収録。
与えられた整数を素因数分解し、イテレータに出力する関数。
使われているアルゴリズムは素朴なものなので、大きな数に対して実用性はありません。
テストコード: tests/factorize.cc
lexical_casts
ヘッダ <gintenlib/lexical_cast_default.hpp>, <gintenlib/lexical_convert.hpp> に収録。
boost::lexical_cast のちょっとした応用です。
テストコードはありません。
list_formats
ヘッダ <gintenlib/list_format.hpp>, <gintenlib/list_formatter.hpp> に収録。
コンテナの中身を整形してストリーム出力するためのライブラリです。
std::cout << gintenlib::list_format( container ) << std::endl;
のように使います。
テストコード: tests/list_format.cc, tests/list_formatter.cc
math
ヘッダ <gintenlib/math.hpp> に収録。
<cmath>をインクルードした上で、M_PI といったマクロを定義します。
テストコードはありません。
options
ヘッダ <gintenlib/options.hpp> に収録。
GNUgetopt 関数互換の、プログラムオプション解析ライブラリです。
テストコード: tests/options.cc
to_string
ヘッダ <gintenlib/to_string.hpp> に収録。
std::ostringstream を用いて任意変数を文字列変換します。恐らく最もありきたりなライブラリ。
テストコードは必要ないでしょう。
value_savers
ヘッダ <gintenlib/typed_saver.hpp>, <gintenlib/value_saver.hpp> に収録。
コンストラクタで受け取った変数の値を記録し、デストラクタで書き戻す、という一連の動作を行うクラスです。
typed_saver は書き戻す変数の型を指定する必要がありますが動的なメモリ確保を行わず、 value_saver は動的メモリ確保が行われますが型を指定する必要がありません。
テストコード: tests/value_saver.cc

実装補助

bool_comparable
ヘッダ <gintenlib/bool_comparable.hpp> に収録。
いわゆる SafeBool イディオムです。 使い勝手は Boost.Operatos と似た感じで、 bool operator!() const; 関数から operator unspecified-bool() const; 関数を生成します。
テストコード: tests/bool_comparable.cc
pointer_facade
ヘッダ <gintenlib/pointer_facade.hpp> に収録。
get 関数さえ定義すれば、型定義から演算子多重定義、同一テンプレート間での比較処理まで、全部やってくれる便利ライブラリです。
テストコードはありませんが、各種スマートポインタのヘッダを見に行けば十分サンプルはあります。
preprocessors
ヘッダ <gintenlib/preprocessor/dequote.hpp>, <gintenlib/preprocessor/enable_if.hpp> に収録。
GINTENLIB_DEQUOTE はマクロの引数にテンプレートを渡したい場合に使う補助マクロ、
GINTENLIB_ENABLE_IF, GINTENLIB_DISABLE_IFboost::enable_if を使ったコードを簡潔に書けるようにする為のマクロです。
テストコード: tests/enable_if.cc
reference_counter
ヘッダ <gintenlib/reference_counter.hpp> に収録。
boost::intrusive_ptr に格納できるクラスを簡単に製作する為のライブラリです。
テストコード: tests/reference_counter.cc