コンパイル時リスト処理続き

c++

g++で通らなかったのは型指定してなかったからのようです。 template <typename T> struct generate_multiply_table { typedef typename map_list< bind_1st<multiply,T>::template currying_type, iota<5,0>::type>::type type; } このように書き換えたところちゃんとg++でもコンパ</multiply,t></typename>…

コンパイル時リスト処理

c++

前回の日記からコード整理してみました。 ソースはこちら前のコードだと二重mapが実現できなかった(というか実現するためにmapの中身をそのたびに書き換えないといけなかった)んですが、こちらの「テンプレート引数にクラステンプレートを渡す話」みてできそ…

テンプレートを使ったコンパイル時数値計算

c++

#include <iostream> #include <typeinfo> template <typename T, int length> struct array { typedef T element_type; element_type elements[length]; element_type& operator[](int offset) { return elements[offset]; } const element_type& operator[](int offset) const { return elements[offset</typename></typeinfo></iostream>…

バイトオーダ反転、ビットオーダ反転

c++

#include <iostream> template <int value_, typename T = int, int size = sizeof(T)> struct byte_order_reverser { enum { msb = (value_ >> ((size - 1) * 8)), other = (value_ - (msb << ((size - 1) * 8))), reverse_value = (byte_order_reverser<other, T, size-1>::reverse_value << 8) + byte_order_reverser</other,></int></iostream>

ファイル全体読み込み

c++

ファイルの中身を全部読み込むから。自分が書くとこういう感じですかね。 #include <iostream> #include <fstream> #include <iterator> #include <iomanip> #include <vector> int main() { std::ifstream ifs("file_read.cpp"); if (!ifs) { std::cerr << "file can not open." << std::endl; return -1; </vector></iomanip></iterator></fstream></iostream>…

コンパイル時cos()

C++

コンパイル時に計算してくれるcos()関数ってなんか面白そう?と思って作ってみました。 関数をテイラー展開してそれを演算してるだけです。 やー、lispと違って末尾再帰じゃなくても折りたたまれるのは楽でいいなぁ(笑) template <typename ValueType, int exponent> class power { typedef Val</typename>…

続き

C++

どうもvector3_t、要するに3Dで使われるような座標のベクトルだった模様。 まぁIntel386系のコンパイラだとfloatは大体sizeof(float)==4なので3つ組だと12バイトなので16バイトアライメントにはなりませんなぁ。 #include <allocator.hpp> #include <vector> #include <iostream> struct </iostream></vector></allocator.hpp>…

アライメントアロケータ その弐

C++

こちらでアライメントされてるvectorのvectorがコンパイルエラーになるけれどカスタムアロケータならいけるのか聞かれたので早速実験してみるテスト #include <allocator.hpp> #include <vector> #include <iostream> struct hoge { char fuga[16]; }; int main() { typedef std::vector<hoge, risa_gl::aligned_allocator<hoge, 16> > ali</hoge,></iostream></vector></allocator.hpp>…

Y combinator. そして末尾再帰に取り付かれる

不動点演算子といってラムダ計算やらコンビネータ理論やらのものらしいです。 ちゃんと調べてないのでよくわかってません(笑)ただ、これを使うと無名関数を再帰することができる、ということです。で自分で実装して考えてみる。 まずは再帰のお供、fact関数…

アライメントされたメモリアロケータ

C++

メモリのアライメントでアライメントされたアロケータのアイデアがかかれてたのを実装したのが手元にあったので公開mmxとか用に使おうとおもって作ったやつがあるんですがよくよく調べてみたらどうせ拡張命令でしか使わないのであればmmxのintrinsics用ヘッ…

columnのdrop

sqlで面白そうなことやってたのでツッこんでみる 結果つけたら結構でかくなったのでこっちで。まずはテストテーブルの作成 sqlite> .explain on sqlite> create table test ( ...> id integer, ...> field1 text ...> ); カラムの追加 sqlite> alter table t…

wwwdll関連でいくつか修正+追加

web

まずNetscapeEnterpriseサーバ(まだ動いてるとこあるんだ・・・)がHTTP応答でContent-LengthをContent-lengthと返してきてサイズが取得できず、タイムアウト待ちになってた。 なのでHTTPPropertyを修正してComparatorをcase sensitiveではないように変更。つ…

wwwdllの修正

web

利用者の某氏から忍者の何とかする、ということでfilter.txtの変更とか。 ついでにfilter.txtでトークンセパレータのタブが一個じゃないとだめという問題を修正。あとヘッドトークンとターミナルトークンにそれぞれコンテンツの先頭、終端にマッチするパター…

Quatenionのつづき

SLERP(Spherical Linear interpolation、球面線形補間)を直す。式を勘違いしてた。 というかですね、プログラム言語ばっかり扱ってるとべき乗表記だったり空白ひとつあいてるだけだったりで「関数」とか表記されるのはわかりずらいんですよ・・・ とくに演算の…

Quatenion

をクラス化する。が、まだオイラー角による操作を作ってない。 まだテストをちゃんと作ってない(動作確認のサンプル作っただけ)のでさっさと作らないと・・・

よつばの。チェッカー

web

が、在庫量を取れてなかったので原因を調べて修正。 原因はstock[0-5].gifのパス表記がサーバ名含めたフルパスからサーバトップからのパスに変わっていたからだった。 ついでにソースコードのキャラクタセットを全部UTF-8に修正。

web更新チェッカ

チェック対象のメインが画像ファイルになるので1リソースとして識別できる。現状だとサイトの更新情報ページの更新をチェックして判断してるので更新情報を人が読み判断する必要がある(=面倒、手間がかかる)。サイトの構造をツリーとして持っていればリソ…

texture

を便利に使おうとクラス設計を考えてるんですが、Internal/ExternalFormatが色々ありすぎてどうやってやろうか正直迷う・・・ 普通の2DテクスチャだけならそれでいいんだけどdepthをGL_RGBAにレンダリングとかは出来ないみたいだしなぁ・・・現時点でWindows DI…

というわけで・・・

アキバの書泉ブックタワーでいつもどおりフライング販売してたので買ってきた。ぺらぺらっと読んで気がついたんだけどframebuffer object拡張ってまだEXT扱いだから載ってないのね・・・

redbook 5th日本語版

http://www.amazon.co.jp/gp/product/4894717239 OpenGLをいじりなおし始めた自分にとってはタイムリーなことに今頃になってやっと版が変わるらしい。英語力のない自分にはありがたいのですが・・・訳者も変わってるのでちょっと安心。第二版のアレさ加減は…

glewとfree glut

MinGWで使うためコンパイル。 デフォルトだと両方ともdllをコンパイルするのでstatic lib作成のためにいじる。・free glut $ CFLAGS="-g -DFREEGLUT_STATIC " ./configure --prefix=c:/mingw --build=i686-mingw32 --disable-shared --disable-sharedは効い…

texture

Textureは ・glGenTextures()で名前生成(実際のとこ、コレは他とかぶらなければ必要ないといえばない) ・glBindTexture()でバインドして作成 ・glTexImage*D()でサイズ指定、最後のポインタパラメータに0を突っ込めば初期化される。色とかほしい場合は画素…

renderbuffer object

renderbufferの内部フォーマット(というかOpenGLの中身全般そうか)は規格で定義されておらず、実装側の自由となってる。よってrenderbufferへの各種操作は現在の状態として設定してからの操作のみ受け付けているような感じ(まぁOpenGL実装自体がでっかい状…

framebuffer object

引数の型は確認してないのでいいかげん。というかどの拡張のドキュメントにのってるのかはっきりわからん・・・ 追記: http://www.opengl.org/registry/specs/EXT/framebuffer_object.txt この辺か・GenFrameBuffersEXT(int num, GLuint* frameBuffer); フレー…