ボレロ村上 - ENiyGmaA Code

中3女子です。

2011-01-01から1年間の記事一覧

コンパイル時 FizzBuzz を読んでの Sprout C++ Library 改善

id:osyo-manga さんの Sprout を使った記事↓ [C++][Sprout]Sprout でコンパイル時 FizzBuzz http://d.hatena.ne.jp/osyo-manga/20111207/1323187352 を読んで、「ああ、Sprout にこんな機能が足りなかったな」という部分に思い当たったので、 それを追加した…

Sprout.Darkroom で外部ファイルからのテクスチャマッピング

https://github.com/bolero-MURAKAMI/Sprout Sprout.Darkroom に、コンパイル時に外部ファイルからテクスチャを読み込む機能を追加しました。 テクスチャマッピングの定番ということで、球体に世界地図を Spherical Mapping で貼り付けてみます。 out.png ア…

Sprout.Darkroom でチェック模様のテクスチャを使ったレンダリング

Sprout.Darkroom は、constexpr ベースのコンパイル時レイトレーシングライブラリです。 https://github.com/bolero-MURAKAMI/Sprout Sprout.Darkroom は、特定のインタフェースのクラスをテクスチャマップやスペキュラマップとして オブジェクトに設定する…

Boost.Wave を使ってみる

本記事は、Boost Advent Calendar 2011 の9日目の記事です。 本稿では Boost.Wave という C/C++ プリプロセッサライブラリについて書きます。 Boost.Wave とは Boost.Wave は、パーサコンビネータライブラリ Boost.Spirit によって書かれた C/C++ プリプロセ…

constexpr レイトレーシング

これは、Sprout.Darkroom ライブラリの constexpr レイトレーサーでレンダリングした画像です。 画像サイズは 512×512 pixel。 もちろん画素データはすべてコンパイル時に生成され、ファイル出力のみが実行時に行なわれています。 光源は手前右側にあり、手…

constexpr ライブラリ

constexpr を主眼としたライブラリは未だそう多くないと思います。 C++標準ライブラリでは、numeric_limits や chrono など自明ないくつかの機能が constexpr 化されています。 また、libstdc++ など標準ライブラリベンダの独自拡張として constexpr 化され…

constexpr のコンパイラ対応

gcc4.7 は、constexpr によく対応しています。 なお、この記事のコードは gcc 4.7.0 20111126 (experimental) において検証・実行しています。 VC10 は、全く以て constexpr に対応していません。 C++11 時代の C++er は、VC10 を使うとき C++11 のことを忘…

constexpr とは

constexpr は C++11 で導入された指定子のキーワードです。 変数を明示的にコンパイル時定数として宣言したり、 実行時にもコンパイル時にも呼出しできる関数を宣言したりできます。 また、C++03 の定数値のように整数型や列挙型だけでなく、浮動小数点型や…

constexpr でレイトレーシング

本記事は、C++11 Advent Calendar 2011 の5日目の記事です。 本稿では C++11 の新機能である constexpr について書きます。 まず最初にお断りしなければならないのは、この記事は constexpr そのものについて詳しく解説したり、 導入の一助となるべく書かれ…

Sprout.Algorithm - constexpr mutating operations アルゴリズム入門

以前も書きましたが、Sprout C++ Library は固定長コンテナに対する STL ライクな変更のアルゴリズムを提供します。 Github https://github.com/bolero-MURAKAMI/Sprout もちろん constexpr では代入操作が出来ないので、インタフェースなどは STL とは異な…

関数パラメータパックと無限再帰の問題

Variadic Templates は強力なC++11 の新機能である。 これを関数の可変長引数に適用したものを関数パラメータパック(function parameter pack)と呼ぶ。 もちろん constexpr でも関数パラメータパックは重宝する。 ところで、これを再帰と組み合わせた場合…

Sprout.Random - コンパイル時の乱数生成

Sprout.Random - コンパイル時の乱数生成 実装してみた。 Github https://github.com/bolero-MURAKAMI/Sprout ヘッダは です。 シードとして使える SPROUT_UNIQUE_SEED マクロは にあります。 現時点で実装済みであるのは、 ・ジェネレータ minstd_rand0, mi…

Sprout C++ Library

Github https://github.com/bolero-MURAKAMI/Sproutこのライブラリは、C++11 の constexpr に対応した、固定長コンテナに対する STL ライクな変更のアルゴリズムやコンテナ操作を提供する。 constexpr は面白いです。おそらく C++11 時代の C++er たちの新し…

Sprout.String - constexpr 文字列クラス

Sprout.String - constexpr 文字列クラス

Sprout.String - constexpr 文字列クラス sprout/string.hpp Github https://github.com/bolero-MURAKAMI/Sprout/blob/master/sprout/string.hppSprout.String は、constexpr で使える(固定長)文字列クラスを提供します。 モチベーション constexpr の規格…

Boost.Random にバグレポート投げた。

Boost.Random は Boost 1.47 での更新で、C++0x の の仕様に合わせたりするのため、 Boost 1.46.1 からかなりの手が入っています。変更には、いくつかの下位互換性の問題を含む(しかし避けられない)ものもあります。 変更点の詳細は以下で見られます。boos…

土器が焼きあがった

といっても、先月の4月16日のことになるので、書くのがずいぶん遅くなった。 詳細や野焼き中の写真は、下記のページに載っています。 春の縄文野焼き祭り(平成23年度) | イベント情報 | 猪風来美術館 http://www.ifurai.jp/event/kako/haru_noyaki_h2…

O(n) 〜 O(1) のオーダーで Boost.Fusion のシーケンスの N 番目の要素の型を得る

通常、あるシーケンスの N 番目の要素の型を得るには、以下のようにする。 boost::fusion::result_of::value_at<Seq, N>::type fusion::result_of::value_at および fusion::result_of::value_at_c は、Forward Sequence を要求する。 すなわち fusion::list や、Ran</seq,>…

qi::int_parser,qi::uint_parser の使いかた

Spirit.Qi には、qi::int_ や qi::uint_ といった、に数値文字列にマッチするプリミティブパーサが用意されている。 これらの Attribute は int や unsigned である。 もし short や unsigned short の Attribute を用いたければ、qi::short_ や qi::ushort_…

Boost.Spirit.Qi によるコードからみる雑多な解説

Spirit.Qi は Boost の構文解析ライブラリである。 演算子オーバーロードにより、EBNF 記法に近い書き方で、C++ のコードとして構文定義を書くことができる。 Spirit V2 からは、Boost.Fusion のタプル等と強力な連携がなされ、 解析結果をタプルやコンテナ…

Boost にバグレポート投げた。

先日より書いていた Boost のバグレポートについて、New Ticket を投稿しました。 何だかんだで間が開きましたが。 Ticket #5280 と Ticket #5281 がそれです。 Ticket #5280 https://svn.boost.org/trac/boost/ticket/5280 compilation error by including …

吉里吉里で様々な乱数と確率分布を使う - ktl/VariateRandom.tjs

乱数を扱う吉里吉里用のネイティブプラグインを書いた。 ところで吉里吉里(TJS2)には、組み込みで Math.RandomGenerator クラスという疑似乱数生成クラスがある。 Math.RandomGenerator クラス http://devdoc.kikyou.info/tvp/docs/tjs2doc/contents/rando…

大型の土器。

高さ60㎝近い大型の土器。 冠部の5つの突起が特徴的である。 火焔土器をはじめ多くの縄文土器は2ないし4つの突起を持ち、 このように多数で奇数個の突起をもつものは珍しい。 制作上のポイントはやはり大きくせり出した突起であり、 火焔土器の場合突起を…

バグレポートの英文とパッチ

件の Boost.Wave と Boost.PropertyTree のバグについて、新しい Ticket を投稿すべく、英文とパッチを書いてみた。 何しろ英語力が(ry なので、相当酷いです。 パッチについては、正しく動作することは一応確認しておりますが、こんな感じで良いものかどう…

Boost にバグ報告を投げたい

先日の記事でも書いたが、Boost 1.46.0 現在でも修正されていない小さなバグが2つある。 ライブラリは Boost.Wave と Boost.PropertyTree である。 Tickets を検索してみた限りでは、同じような報告は見つからなかった。 この2つのバグについて、僕は新し…

【1.46.0】【fusion】 fusion compare is broken

Boost 1.46.0 で、Boost.Fusion がコンパイルできないバグがあった。 これは、VC8 と VC7.1 のために書かれたコードの問題である。 当該ヘッダは で、 detail::is_native_fusion_sequence が使われているが、これは traits::is_native_fusion_sequence の誤…

enable_switch - 複数の重複しうるコンパイル時条件で、SFINAE によるオーバーロードを書くには

久々にプログラミングの記事を。 boost::enable_if メタ関数 (C++0x なら std::enable_if)は非常に重要なユーティリティである。 SFINAE によって、関数テンプレートやクラステンプレートの、コンパイル時条件によるオーバーロードを行う。 メタプログラミ…

祭器。

磨き上がったもの。 大きな高台が特徴の祭器である。 ざっくりとしていながら、円熟した造形力を感じさせる文様。 これを綺麗綺麗にやってしまうと勢いが出ない。 つくる上ではそこが難しかった。 おそらく、元は熟練の縄文人の手によるものだろう。

火焔土器ふたたび。

制作期間約8日。高さ50センチ超。 堂々たる風格だと思う。

火焔土器。

横から。 やや上方から。 制作期間約6日。高さ38センチ。 火焔土器の中では小振りなほうだが、反面、上部の鶏冠状突起の大きさは 国宝指定されている最大級のものに近い大きさがある。 全体を覆う文様は線刻文のように見えて、実際には紐づけで土を盛ってか…