Boost

Boost.Container stable_vector

はじめに 本記事は partake.in 7日目です。 stable_vector Boost 1.48からBoost.ContainerというSTL互換のコンテナライブラリが採用されました。基本的にはboost::container::vectorやboost::container::stringといったSTL互換のクラスが提供されていますが…

Asioでepollを使うのをやめる

Linux環境下でのBoost.Asioは、標準でepoll_reactorを使用します(AsioではIO多重化を行うクラスをreactorと呼んでいます)。しかしながら、epollは登録できるfile descriptorの種類がselectよりも狭いという仕様上の問題があります。例えばファイル(regular f…

夏休み終ったけどbjam始めてみます 4日目

夏休みはもう終ってしまいましたが、bjamはたまーに使っています。 C++のソースコードをコンパイルするだけなら、bjamは最短なのではないでしょうか。 …と思いましたがmake最短ですね…。 boost使いたいです 3日目に書いた方法でboostを使ってもいいのですが…

夏休みなのでbjam始めてみます 3日目

0xの使い方やライブラリ回りは、プロのbjammerことid:Flast先生に教えてもらいました。 複数のソースから1つの実行ファイルを作りたい 単に依存関係を並べればいいようです。Jamroot: exe a : a.cpp b.cpp ;$ $BOOST_ROOT/bjam release ...found 13 targets.…

夏休みなのでbjam始めてみます 2日目

1日目と同日公開ですが、2日目です。はい。デフォルトのvariantがdebugなので、ぼーっとしてると遅いバイナリを作ってしまいそうで怖いですね。3日目に続くかは謎です。 variantオプション bjamはデフォルトでdebugモードでビルドされます。ビルドモードを変…

夏休みなのでbjam始めてみます 1日目

bjamが欲しいので、まずはboostをダウンロードして展開し、bjamをビルドします。そして、boostを展開したディレクトリをBOOST_ROOT環境変数に定義しておきます。BOOT_ROOTはbjamの動作上も必要です。 $ export BOOST_ROOT=/path/to/boost $ cd $BOOST_ROOT $…

Boost.Phoenixのうーん?

phoenix::letの中で、引数(_1, _2, arg0, arg1系)は参照できず、コンパイルエラーになります。になって、引数がどっかにいってしまう。">*1この挙動はとても不便ですが、仕様としてこうなのか、実装がバグっていてこうなっているのかはわかりません。 void f…

Boost.Serializationの出力形式としてMessagePackを使えるようにしてみた

Boost.ArchiveのMessagePackバックエンドに用いた実装です。まだ試作段階ですが、Boost付属のSerialization用テストは一通り合格しているので、とりあえず動くと思います。ソースコードはgithubにあります。なお、ビルドツールはwafを使用しているため、ビル…

Boost.勉強会 #4で発表しました

Boost.勉強会 #4 : ATND で発表してきました。資料は Boost.勉強会#4 Boost.Proto にあります。他の方の発表資料については、id:thincaさんがいい感じにまとめてくれています。感謝。さて、僕はBoost.Protoネタで発表をしてきたわけですが、前半後半と分けた…

Boost.Protoぺろぺろ

最初に このエントリは C++ Advent Calendar jp 2010 : ATND 16日目の記事です. Boost.Protoぺろぺろ Boost.ProtoとはBoostに含まれているExpression Template(ET)のためのライブラリです.Xpressiveや,Spirit,Phoenix v3のベースとなっています.このエ…

Oven meets Boost.Spirit.Karma

Boost.Spiritは元々が*1がパーサージェネレータであったこともあり、Qiが一番有名であると思いますが、Boost.Spirit一家にはKarmaという次男坊(?)がいます。Spirit.KarmaはSpirit.Qiの逆で、データから文字列を生成するコンビネータ郡です。Performance of N…

Boost.Buildで複数のバージョンのgccを切り替えて使う方法

$ bjam toolset=gcc のようにして実行をすると、システムデフォルトのgcc, g++が使われます。しかしながら、複数のgccのバージョンを切り替えてビルドやテストを行いたいケースもあります。autoconfによるビルドを採用しているソフトウエアならば、一般的に…

Boost.Rangeでdropを実装してみた

なぜかBoost.Range.Adaptorsにdropがなかったので作ってみた。slicedでdropを書けなくはないんですが、長さがわからないrangeに適用できないのが問題です。実際はtakeを先に作ったんですが、dropの方が短かったので…。 boost::copy(input | taco::drop(5), o…

Boost.GILでブレセンハムのアルゴリズム

Boost.GILで線を引きたくなったので作ってみた。ある点 a から点 b まで線を引くパターンで、b.x >= a.x かつ b.y >= a.y かつ b.x - a.x >= b.y - a.yのパターンのみ実装しています。それに合わないケースはrotated_viewやtransposed_viewで視点を変更して…

Boost.GILによるpng生成

libpngってC++ friendlyじゃないよね、って呟いていたら、id:faith_and_braveさんに「そこでBoost.GILですよ」と言われたので、作ってみた。 #include <utility> #include <boost/gil/gil_all.hpp> #include <boost/gil/extension/io/png_io.hpp> int main() { namespace gil = boost::gil; gil::point2<ptrdiff_t> dim(400, 400); gil::gray</ptrdiff_t></boost/gil/extension/io/png_io.hpp></boost/gil/gil_all.hpp></utility>…