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>…
なんとなくWindowsのメッセージループを反復子にするアイデアを思いついたので書いてみました。 役に立つかは不明です。 以下、コード。
bjam_grammarをテストしていて、string_listのバグを見つけました。 hamigaki::bjam::string_list ls; ls.begin() == ls.end(); // VC8のデバッグモードだとassert落ち 原因は、string_listが空の場合、begin()もend()も空(どのvectorの要素も指していない)…
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には指定可能なバッファサイズを取得するASIOGetBufferSize関数があります。 ASIOError ASIOGetBufferSize(long *minSize, long *maxSize, long *preferredSize, long *granularity);ここで、 minSize 設定可能な最小バッファサイズ maxSize 設定可能な…
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、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>…
今日は時間がなくて、こんなのしかできませんでした。 誰もが一度は作りそうなistream_iteratorのgetline版です。
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も作ってみました。
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…
iteratorの作り方を覚えると、列挙できるものは何でもiteratorにしたくなります。特に、Boost.Iteratorを使うとiteratorの作成が劇的に簡単になるため、なおさらです。しかし、DirectXで採用されているEnum系の関数(Enum〜、〜Enumerate)はiteratorモデルに…