ruby-trunk-changes r34456 - r34462

今日は st.c の pack されたテーブルの処理中に unpack された場合の動作の修正などがありました。

nobu:r34456 2012-02-07 14:29:20 +0900

st.c の st_foreach で packed 状態のテーブル(numhash)を巡回中に要素が追加されて unpack された場合に unpack 版の処理に飛ぶときに同じ要素を再度ブロックに渡されないように修正しています。

svn:r34457 2012-02-07 14:29:27 +0900

version.h の日付更新。

nobu:r34458 2012-02-07 14:43:49 +0900

r34456 で追加したテスト用の numhash を利用する拡張ライブラリでメモリ解放関数の登録忘れを修正。

nobu:r34460 2012-02-07 14:52:15 +0900

st_update() (st_lookup() + st_insert()/st_delete() 相当の関数)でもブロックの実行中に packed 状態のテーブルに要素が追加されて unpack された場合に unpacked 版の処理に移行する処理を実装しています。

nobu:r34461 2012-02-07 19:37:40 +0900

st.c の packed 状態の処理は table->bins を st_value 型の key と value のペアが順番に並んだ配列として扱うのですが、 key, value がの2つのメンバをもつ構造体 st_packed_entry を導入して、table->bins を st_packed_entry の配列として扱うようにリファクタリングしています。
構造体がうまくpackされている(余計なpaddingがない)ことをチェックさせるために STATIC_ASSERT というマクロが定義されていておもしろいです。typedef 中に三項演算子を使うのとか古いコンパイラでも動くでしょうか。

ayumin:r34462 2012-02-07 20:13:40 +0900

Exception#inspect の rdoc の typo 修正。