C++

C++11時代のthreading

C++

始めに 本記事は C++11 Advent Calendar 2011 : ATND の6日目です。 std::thread C++11時代のthreadの基本は std::thread です。おもむろに #include をしましょう。std::threadはコンストラクタで渡された関数オブジェクトを別スレッドで実行します。 #incl…

ZeroMQとfork(2)ではまった

僕はかなりはまったのですが、ZeroMQのcontextはfork(2)で複製できません。以下のようなコードを書くと死にます。forkする前にcontextを破棄するか、preforkしておく必要があります。URLを忘れたのですが、MLでもpreforkしておいてよみたいな流れだったので…

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

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

clang のライブラリの方で遊んでみた

clang のコンパイラではなく、ライブラリの方で遊んでみた。使用した clang(+LLVM) のバージョンは Subversion レポジトリより取得した r127064 。ちょっと古いが気にしない。clangのライブラリの方のドキュメントが見つけられなかったので、主にclang tutor…

BrainfuckをJITしてみた

C++

BFだとJITしやすいので作ってみた。簡単な最適化をしています。add/sub [rdi], immの直後にcmp [rdi], 0が来るのは無駄でしかないので、そこの最適化ぐらいはしてみたいですね。http://gist.github.com/518146ソースコードは400行ほどあるのでgist上に置いて…

CairoとSDLを組合せてつかう

cairoの描画フロントエンドとしてSDLを使ってみた。ちょっと画面に表示させるだけなのにCocoaだのなんだのを使うのが面倒だったので…。見た感じ、cairo image surfaceとSDL surfaceを比較すると、cairoの方がピクセルフォーマットに対する許容度が低かったの…

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

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

std::chronoによる処理時間測定

C++

処理時間の測定は、clockやgettimeofdayを使う事が多いと思いますが、あまりC++っぽくありません。そこで、C++0xからstd名前空間に入ったstd::chronoを使ってみようと思います。std::chrono::system_clock::now()で現在の時刻(time_point)が取れるので、それ…

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>…

std::asyncによる並列for_each

C++

C++ではOpenMPよりも、std algorithmが並列に動いた方が便利だよね。ということで作りました。元ネタはhttps://twitter.com/cpp_akira/status/16195866927です。 #ifdef _OPENMP inline size_t concurrency_omp() { size_t n; #pragma omp parallel { n = om…