2008-05-01から1ヶ月間の記事一覧

構文木を作る その10

ようやくテストをパスしました。 差分 さて、速度比較のためbjam_dumpを実行してみたのですが、これがなかなか動きませんでした。 これはテストケースをもっと増やさないとダメですね。 一部、仕様(というかbjamのソース)を読み違えていたところもあって、こ…

構文木を作る その9

構文木を評価するevaluate_bjam()を作りました。 差分 実装は昨日まで使っていたテストプログラムの流用です。 これでパーサーと(狭義の)インタプリタの実装が終わったので、残りのコンポーネントも旧バージョンからコピーしてきました。 差分 現在、テスト…

構文木を作る その8

えー、昨日のエントリはなしで、、、。 matchのvalueとnode_val_dataのvalueがごっちゃになってました。 結局、Boost.Spiritの構文木の枠組みに合わせて、独自の実装を作成しました。 parse_tree.hpp parse_tree.hpp まず、node_val_dataは反復子に依存する…

構文木を作る その7

昨日の考察で結論がでたはずだったんですが、構文木に反復子を入れるとinclude文で作成する反復子を揃える必要があることを失念していました。 色々考えているうちにスキャナを弄れば行番号を埋め込ませることができそうな気がして、Boost.Spiritのコードと…

構文木を作る その6

インタプリタの実装はできました。 今日の差分 あとはこのインタプリタをライブラリ側に移動させないといけません。 このとき、どこまで汎用化させるべきかをフレーム情報(ファイル名、行番号)との兼ね合いから考えてみました。 ファイル名が変わるタイミン…

構文木を作る その5

今日はえらく中途半端な状態でコミットしてしまいました。 今日の差分 for文 switch文 module定義 class定義 を追加して、while文が作りかけです。 テストコードもとりあえず追加していて、while文が動かないのでコメントアウトしてあります。 今日詰まった…

Solaris 10 5/08 インストール

以前、GUIインストールに失敗した本家Solaris 10ですが、ダウンロードだけしてインストールしてなかったのでSunからインストールの仕方教えます的な催促のメールが来てました。 無視するのも気が引けたので、テキストモードで再トライしてみました。 今度は…

構文木を作る その4

変数展開処理と文法の事前インスタンス化を追加しました。 今日の差分 前のコードとほとんど同じです。 前のバージョンでは、内部は行番号カウント付きの反復子で処理し、結果を返すときに元の反復子に戻していましたが、今回はパース結果に構文木が含まれる…

構文木を作る その3

今日は、構文木を評価してECHOだけ動くインタプリタまで作りました。 構文木の使い方は分かったので、他の機能の実装方法もおおよそ見当がつきました。 演算や制御構造は特に問題はなさそうです。 面倒なのは、ruleとincludeです。 今回はruleを何度もパース…

構文木を作る その2

Hamigaki.Bjamの改良用にSandboxにディレクトリを追加しました。 hamigaki/bjam2 svn copyとかすると前のコードが枷になって大胆な変更がやりにくいので、必要な箇所を切り貼りしながら書き直していき、最終的にtrunkにマージする形をとります。 今日はbjam_…

構文木を作る その1

VMware上でテストしていると、Hamigaki.ArchiversとHamigaki.Bjamのビルドがキツいです。 特にCygwinテスト用に使っているWindows2000だと仮想メモリの割り当てを増やすよう警告が出ます。 CPUファンの音も煩くて困るので、コードを見直すことにしました。 H…

A-law

A-lawが動くようになりました。 差分 どうもA-lawは最終的に偶数ビットをビット反転しないといけないらしく、それを直せばおおよそ合ってました。 電気回路の都合みたいですが、ファイルフォーマットまで反転する必要もない気がします。 リファレンス実装と…

μ-law

μ-lawエンコーディングに対応しました。 差分 μ-lawというのは要するに「振幅の対数を取れば小さくなるよね」というエンコーディングです。 wikipedia:μ-law algorithm 実装としては、μ-lawと浮動小数点数の変換、μ-lawと32ビット整数の変換の二種類を実装し…

au_file.hpp

SunのAuファイルを扱うSource/Sinkを作りました。 <hamigaki/audio/au_file.hpp> Auファイルのフォーマットは、オーディオデータの前にヘッダが付いただけの簡単なものです。 wikipedia:Sunオーディオファイル ただし、Auフォーマットの標準エンコーディングであるμ-lawにHamigaki.Audio</hamigaki/audio/au_file.hpp>…

Solaris/NetBSD 対応完了

SolarisとNetBSDへの対応が完了しました。 Regression TestsにもSolarisを追加しました。 cs-solaris.html http://hamigaki.sourceforge.jp/status/

/dev/audio対応

pcm_sinkとpcm_sourceを/dev/audioに対応させました。 差分 さすがにpcm_device.cppが大きくなりすぎたので、実装毎にファイルを分けるようにしました。 差分 ついでにpcm_sink/sourceを通さずにアクセスできるように個別のクラスも用意しています。 audio_s…

NexentaCP 1.0をインストール

NetBSDのサウンドデバイスは/dev/audioです。 これの再生テスト環境の確保と、どうせなら違うOS入れてプラットフォームを増やしたほうがいいやという考えから、VMwareへSolarisをインストールすることにしました。 まず、最初に試したのはオフィシャルなSola…

endian.hpp on NetBSD

せっかくSourceForge.jpのコンパイルファームにNetBSD(x86)マシンがあるので、Hamigakiライブラリのビルドを試してみました。 で、Hamigaki.Charsetのテストでエンディアンが逆に判定されるという現象に遭遇しました。 問題の箇所はこうです。 template<> st…

sha2.hpp

SHA-1とSHA-256でコードの重複が目立ってきたので、「共通部分を切り出そう」、「ついでにSHA-512とかにも対応しよう」と思って書き始めたらSHA-2(SHA-224/256/384/512)用コードが出来上がりました。 <hamigaki/checksum/sha2.hpp> 当初の目的と違い、SHA-1は別コードのままです。 Boost.</hamigaki/checksum/sha2.hpp>…

Fedora 9 on VMware 5.5.6

Fedora 9をVMware 5.5.6にインストールしました。 まずHDDを認識しなくて困りました。 VMwareでHDDを認識しないことはよくあることで、大抵は別のOSでフォーマットした後なら認識できるのですが、今回はダメでした。 どうもSCSIだとマズいようで、IDEで仮想H…

Re: for each バグ

C++

http://d.hatena.ne.jp/faith_and_brave/20080514/1210755507 これ、mapとかキーとかは関係ないと思います。 #include <iostream> struct hoge { hoge() { std::cout << static_cast<void*>(this) << "\thoge()" << std::endl; } hoge(int n) { std::cout << static_cast<void*>(this</void*></void*></iostream>…

Fedora9

とりあえずダウンロードしました。 日付が古いんですが、RC版がそのままReleaseされたんでしょうね。

続 rotate.hpp/byte_swap.hpp

実際に計測して微調整しました。 差分 昨日のコードでは16ビットのバイト交換にxchgを使っていましたが、これは遅いみたいなのでrolに置き換えました。 ppc版は予想通りsthbrxが遅かったので(というか一旦メモリにストアしないといけないので)C++のコードを…

rotate.hpp/byte_swap.hpp

SHA-256のコードから回転操作とバイト反転操作を切り出して、ライブラリにしました。 <hamigaki/integer/rotate.hpp> <hamigaki/integer/byte_swap.hpp> i386/i486/ppcで動作確認済みです。 ちゃんと測ってませんが、多分ppc版は遅いと思います。</hamigaki/integer/byte_swap.hpp></hamigaki/integer/rotate.hpp>

SHA-256高速化 その1

昨日のコードだと遅すぎなので多少高速化してみました。 差分 定数Kのテーブルをstaticにした エンディアンの変換にインラインアセンブラを使うようにした テーブルをstaticにしていなかったのはBorlandC++の名残です。 そもそも、ビット単位で計算できるイ…

SHA-256

えー、ネタに詰まったら単純作業をこなすことにしています。 とりあえず手を動かすべし! というわけで、今日はSHA-256の実装をHamigaki.Checksumに追加しました。 今日の成果物 一応、ドキュメントも追加しました。 http://hamigaki.sourceforge.jp/doc/htm…

pulse_audio.hppのドキュメント

pulse_audio.hppのドキュメントを追加しました。 pulse_audio.hppのドキュメント pcm_device.hppのドキュメントをコピペしただけで実質中身がないです。 コンストラクタが全然違うので書き直しました。 あとは、typoとか細かい修正だけです。

pulse_audio_source

Linuxでaction_gameが動くようになったので、残作業を片付けます。 今日はPulseAudioで録音するpulse_audio_sourceも作成しました。 差分 録音は最近真面目にテストしてなかったので、マイク使ったのは久しぶりです。(埃かぶってました!) これを使った録音…

ブロックすり抜けバグを修正

GTK版だけジャンプ中にブロックをすり抜けることがあったので修正しました。 差分 浮動小数点演算の誤差が原因っぽいです。 描画、サウンド、入力デバイス、GUIツールキット以外の処理はDirectX版と共通なので、GTK版だけ結果が変わってくるのも変なんですが…

続 ioctlの引数

inline int joystick_get_axes(int fildes, uint8_t* axes) { return ioctl(fildes, JSIOCGAXES, axes); } あるいは、 inline int joystick_get_axes(int fildes) { uint8_t value; if (ioctl(fildes, JSIOCGAXES, &value) != -1) return value; else return…