Iterator

line_counting_iterator

position_iteratorの代用品としてline_counting_iteratorを作りました。 <hamigaki/iterator/line_counting_iterator.hpp> Boost.Spiritのposition_iteratorにはファイル名が邪魔という以外にも、BidirectionalやRandom Accessの反復子に適用すると、iterator_categoryが継承されるにも関わらず--や+=で行番</hamigaki/iterator/line_counting_iterator.hpp>…

get_message_iterator

なんとなくWindowsのメッセージループを反復子にするアイデアを思いついたので書いてみました。 役に立つかは不明です。 以下、コード。

optional_iterator

bjam_grammarをテストしていて、string_listのバグを見つけました。 hamigaki::bjam::string_list ls; ls.begin() == ls.end(); // VC8のデバッグモードだとassert落ち 原因は、string_listが空の場合、begin()もend()も空(どのvectorの要素も指していない)…

operator_arrow_proxy

first_iteratorのドキュメントを書いていて、referenceが参照でない場合、pointerはどうなるんだろうと思って調べてみました。 pointerが必要になるのは、operator->()だけですが、 template<class T> struct operator_arrow_proxy { operator_arrow_proxy(const T& x</class>…

続 レジストリキーの列挙

昨日のregistry_key_iteratorですが、 class registry_key : boost::noncopyable { public: registry_key( ::HKEY parent, const std::string& sub_key, ::REGSAM sam) boost::optional<std::string> sub_key_name(::DWORD index) const; };のようなレジストリキーのクラ</std::string>…

レジストリキーの列挙

そろそろASIOの初期化を修正しようと思います。 CLSIDを直指定だと、いつまでたってもテストコードをパッケージに追加できないのです。ASIOのドライバを検索するためには、レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\ASIO配下のキーを列挙する必要があります…

ASIOのバッファサイズ

ASIOには指定可能なバッファサイズを取得するASIOGetBufferSize関数があります。 ASIOError ASIOGetBufferSize(long *minSize, long *maxSize, long *preferredSize, long *granularity);ここで、 minSize 設定可能な最小バッファサイズ maxSize 設定可能な…

OutputIteratorの要件

OutputIteratorを書いていると、要件が曖昧で不安になってきました。 Library Active Issuesを確認したところ、それを指摘した報告が見つかりました。 http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#485SGIの定義ではより明確になっています…

アルゴリズムの出力要素を数える

counting_iteratorで思い出した小ネタ。 unique_copy()の出力の要素数を知りたい場合(出力自体には興味がない)、どうするか。 vectorにback_inserterで追加してsize()を調べるのは、明らかに無駄が多いです。 名前からしてcounting_iteratorでできそうな気が…

続line_iterator

line_iterator、Boost.Testの中にありました。Boost.Testにはユーティリティが多すぎです。 <boost/test/utils/iterator/ifstream_line_iterator.hpp> <boost/test/utils/iterator/istream_line_iterator.hpp> 実装は、昨日のコードとほぼ同じです。自分のがデリミタの指定を忘れていたぐらいですね。 しかも、Googleデスクトップ検索したら作業フォルダにifstream_line_it</boost/test/utils/iterator/istream_line_iterator.hpp></boost/test/utils/iterator/ifstream_line_iterator.hpp>…

line_iterator

今日は時間がなくて、こんなのしかできませんでした。 誰もが一度は作りそうなistream_iteratorのgetline版です。

富豪的ostream_iterator

id:yotto-k:20060424 さんのindexed_rangeじゃなくて、その出力結果について。 0.3, 0.7, 0.6, 0.2, 0.9, 0.2, 0.7, 0, 0.3, 0.4, 最後の", "が気になりませんか? yotto-kさんの例だとlambdaを使っていますが、ostream_iteratorでも結果は同じです。 この仕…

無理やりiteratorにするとこうなります

試しにスレッドを使ってiteratorも作ってみました。

direct_sound_enumerate

id:mb2sync さんのアイデアで、direct_sound_enumerate()を実装してみました。 // ↓direct_sound.hppヘッダ内 namespace hamigaki { namespace audio { namespace direct_sound { struct device_info { std::string driver_guid; std::string description; s…

Enum系関数とiterator

iteratorの作り方を覚えると、列挙できるものは何でもiteratorにしたくなります。特に、Boost.Iteratorを使うとiteratorの作成が劇的に簡単になるため、なおさらです。しかし、DirectXで採用されているEnum系の関数(Enum〜、〜Enumerate)はiteratorモデルに…