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

コピーコンストラクタを無理やり探索→失敗

C++

g++で例外をコピーするのにコピーコンストラクタのアドレスがどうしても必要なので、無理やり探す方法を考えてみました。 struct copy { copy(); copy(const copy&); }; void bar(const copy& e) { throw e; } みたいなコードがあった場合、 __Z3barRK4copy:…

current_exception()の失敗

current_exception()が失敗したら、std::bad_alloc用のexception_ptrを返すようにしました。 <hamigaki/exception/msvc/exception.hpp>の差分 std::bad_alloc用のexception_ptrをstaticに持つ方法もありますが、ヘッダonlyで済ませたかったこともあり、exception_ptrに特殊な状態を追加して、これでs</hamigaki/exception/msvc/exception.hpp>…

N2179: Language Support for Transporting Exceptions between Threads

よく見たらC++0xのドラフトにはN2179で提案された例外の転送機能が含まれていたので、実装してみました。 今日の差分 とりあえずVC++だけ対応です。まだ、一部多重例外になる箇所が残っています。 こんな感じに使えます。 #include <hamigaki/exception.hpp> struct my_exception{}; </hamigaki/exception.hpp>…

スレッドを超えて例外を伝播させる その2

例外伝播テストをVC++に対応させました。 差分 あと、g++でスタック巻き戻し中で保留中の例外がある間に別の例外を投げて、その例外を伝播させようとするとクラッシュしていたので修正しました。 差分 まだ細かいバグは残ってると思うんですが、一応g++とVC+…

VC++の例外処理の仕組みを追う その4

C++

今度は退避しておいた例外オブジェクトの再スローです。 例外を送出するには、 スタックに例外オブジェクトのサイズ分の領域を確保する コピーコンストラクタを呼び出して例外オブジェクトを初期化する _CxxThrowException()を呼ぶ という手順を踏むことにな…

VC++の例外処理の仕組みを追う その2

C++

id:rayfillさんに教えてもらった「How a C++ compiler implements exception handling」を途中まで読んだんですが、実装がg++と随分違うことが分かりました。 例外オブジェクトはスタック上に配置され、スタックの巻き戻し中もスタックに残ったままになる ス…

VC++の例外処理の仕組みを追う その3

C++

catchした任意のオブジェクトをコピーするところまで出来ました。

VC++の例外処理の仕組みを追う

C++

昨日はg++の例外処理を追ったので、今日はVC++も調べてみました。 適当な例外を送出するコードを逆アセンブルすると、_CxxThrowException()という関数が呼ばれていたので、これをキーワードに調べてみたところ、CRunTinyというプロジェクトがVC++用簡易ラン…

空クラスのnew

C++

http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/Isoparametric/20080124/1201185062 のid:sankasekiさんのコメントに関して補足。 「空クラスをnewしたらNULLになるんじゃないの?」という意見ですが、規格では、 5.3.4/10 A new-expression passes the…

スレッドを超えて例外を伝播させる

今日は少し脱線して、以前から試してみたかった、スレッドを超えて例外を伝播させることに挑戦してみました。 propagate_test.cpp とりあえず、g++限定です。 例外オブジェクトはスタックに置くことはできないので、ヒープや自由領域と似たメモリに置かれて…

カスタムリソース

初期位置キャラクタ用の画像をWin32リソースファイルとして参照するためにPNGのカスタムリソースに対応しました。 今日の差分 元々読み込み処理がstd::istreamに抽象化されていたので、リソースのアドレスを取得してboost::iostreams::array_sourceを作って…

元に戻す

やっぱり初期位置はマップ毎に持った方がよさそうなので、マップのプロパティから選択できるようにしようと思ったんですけど、それだったら編集中のマップ上で選択できたほうが自然です。 マップに配置するなら、初期位置をマップチップで表現したほうが楽な…

action_game再開

ライブラリのメンテナンスも終わったので、action_game.exeの作業に戻りました。 今度はプレイヤーキャラの変更が可能なように修正してみます。 今のコードはプレイヤーキャラのGUIDが固定になっているので、キャラクタエディタでplayer属性のキャラクタを作…

sandbox作成

SVNリポジトリにsandboxのプロジェクトを作って、action_game関連を移動しました。 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi/sandbox/trunk/?root=hamigaki Windows用の実装しかないHamigaki.Inputも一緒に移動しています。 ルートのJamfileで必要最…

ヘルプコメント

BBv2のヘルプコメントに対応しました。 差分 Hamigakiライブラリのビルドカスタマイズのドキュメントは、結局のところbjamモジュールの使い方についてなので、これで代用することにしました。 一つ問題があって、Hamigakiライブラリではproject-root.jamの中…

Compiler Status更新

VC++8でもテストして、Compiler Statusを更新しました。 http://hamigaki.sourceforge.jp/status/ どうしてもテストに時間がかかってしまうので、今回からVC++7.1は除外しました。 あとはドキュメントをちまちま修正してました。 ビルド方法も少し加筆。 htt…

MinGW 3.4.5インストールメモ

MinGWをすべてCurrent Releaseに更新しました。 以下、wstring/wcout対応付きのインストールメモです。 1. 以下のパッケージをC:\MinGW以下に展開する。 gcc-core-3.4.5-20060117-1.tar.gz gcc-g++-3.4.5-20060117-1.tar.gz binutils-2.17.50-20060824-1.tar…

VC++9.0対応一応完了

一応、VC++9.0で全てのテストをパスしました。 MinGW 3.4.5もOKです。 ただ、今のテストで検出されないバグを見つけたのでもう少し手直しします。 (1/19 追記: バグと思ったけど問題なかったので修正完了)

bjamの日本語の扱いが酷い件

VC++9.0対応の関係でSVNのtrunkからBoostを取ってきて、久々にbjamをビルドしたんですが、なぜかコンパイラの診断メッセージが化けます。 で、ソースを眺めてみると、execnt.cにこんなコードを発見しました。 /* clean up non-ascii chars */ int i; for ( i…

VC++9.0に対応中

VC++9.0でビルドしたら半分ぐらいエラーになりました。 原因の大部分はBoost.Iostreamsの最近の変更箇所です。 detailの下の便利クラスを使っていたので仕方ないですね。 修正のほとんどはJamfileです。 Expressだとツールセット名も違うことに気が付いて、…

Boostのインストール方法

HamigakiライブラリのドキュメントにBoostのインストール方法についての記述を追加しました。 http://hamigaki.sourceforge.jp/doc/html/installation.html あくまで、Hamigakiライブラリ用のインストール方法なので、Pythonの設定とかは無視しています。 こ…

ビルド設定を修正

引き続きbjamがらみの修正をしていました。 NO_DEBUG_BOOSTを定義することでデバッグビルドでもリリース版のBoostにリンクできる機能を追加 昨日の修正でWindowsのダイナミックリンクが動かなくなっていたのを修正 boost-version.jamでBOOST_ROOTよりBOOST_I…

続 boost-prebuiltモジュール

Fedora8をインストールして、ビルド済みBoostへ対応中です。 とりあえず以下を直しました。 NO_BOOST_STD_LIB_NAMEを定義していても無視されるバグを修正 regressionツールのビルドでビルド済みBoostに対応 以前作ったboost-prebuiltですが、Fedora8(という…

土管 完成

土管の出入りのアニメーションを実装しました。 差分 昨日の予定通り、「土管に入る方向」と「土管から出る方向」をエディタで設定できるようにしています。 「土管に入る方向」は土管に入るときのキー方向にもなります。 あと、マップは複数持てるのに移動…

土管 その7

フェードイン/フェードアウトを実装しました。 差分 どのレイヤで実装すべきか悩みましたが、イベントハンドラから操作しやすいという理由で、カメラ(スクロール)用のキャラクタとして描画することにしました。 カメラのgame_character::colorでフェード色を…

土管 その6

昨日のagt-yhファイルは座標にスクロール分が足されていなかったので修正しました。 差分 それから、別マップへの移動も実装しました。 差分 現状、マップファイルを読み直しているので、敵もアイテムもブロックも全部復活します。 TODO: 画面切り替え時のフ…

土管 その5

移動先をagt-yhファイルに記録して、ゲーム側で参照するようにしました。 agt-yhファイル保存の差分 agt-yhファイル修正差分 ゲーム側の差分 ついついテストプレイを繰り返してしまって遅くなりました。 TODO: 別マップへの移動 移動先の変更、削除

土管 その4

土管の移動先を選択するダイアログ(position_dialog)を追加しました。 今日の差分 pipe_down_routineを設定したキャラクタを配置するとposition_dialogが出るようになっています。 マップから移動先を選択するウィンドウ(PosSelectWindow)は、マップ編集ウィ…

土管 その3

昨日のスクロールアウトの問題はアドホックに解決して、土管に入るアニメーションと効果音を追加しました。 今日の差分 スクリーンショットは、間違って土管をワープさせてしまった図です。 土管に入るアニメーション用に作ったpipe_down_routineですが、最…

土管 その2

プレイヤーキャラと接触しているときに発生するイベントon_touch_playerと、下を入力しているとワープするtransfer_down()を実装しました。 今日の差分 とりあえず、移動先はスタート位置固定で実装してみたものの、同画面内の移動しか正常に動作しません。 …