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

追記

あー、call 40が消えてるんじゃなくて下駄が4なのかな? だとするとcallがrelocation情報ときれいに合うな。 けどそうするとなんで_allocaがchkstkに?という疑問が・・・

オブジェクトファイルの奇妙なcall命令

http://lucille.atso-net.jp/blog/?p=603 これなんですが、たしか参照解決前の関数エントリのインデックスだったような・・・ ということで確認してみる。まずはコンパイルの準備。 ヘッダファイル。 extern "C" void test_c_func(); void test_cpp_func(); …

perlの多次元配列

perlの二次元配列の作り方がさっぱり - 誰か助けて orz - ir9Ex’s diaryの話題について反応。ぶっちゃけperlなんてもう5, 6年まともに触ってないのでぜんぜん覚えてないのでもっときれいなやり方とかあったら誰か教えてください。今回の件がcsvっぽいデータ…

実行時proxy

id:ir9Exさんのとこでメソッド呼び出し時にフックしたいというのがあったので書いてみる。まずはInterfaceのプロキシを作るクラスの用意。 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; …

HibernateのProxy

Hibernateのjarアーカイブ見た感じだとJavaasist使って実行時にサブクラス作ってるぽいっですね。 やっぱりバイトコード直接いじるのか・・・

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

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