スマートポインタ
- 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_ptr
やboost::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
演算子を適用するだけのdeleter
とtyped_deleter
加え、与えられた引数に何もしないdummy_deleter
とtyped_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_IF
はboost::enable_if
を使ったコードを簡潔に書けるようにする為のマクロです。
テストコード:tests/enable_if.cc
- reference_counter
- ヘッダ
<gintenlib/reference_counter.hpp>
に収録。boost::intrusive_ptr
に格納できるクラスを簡単に製作する為のライブラリです。
テストコード:tests/reference_counter.cc