2003-12-26から1日間の記事一覧

インデント

みなさんは、ソースコードのインデント幅はいくつですか? タブですか? スペースですか? 私は、昔は MULE (Emacs) の c-mode を利用していたので、「インデント幅2、タブ幅4、インデントはタブとスペースが交互に入る」という形式でした。 ところが、仕…

MessageHanbdlerAttribute への変更

ハンドラの検索部分を拡張し、MessageHandlerCacheAttribute に対応しなくてはなりません。 public static bool InvokeOne(Type t, object obj, ref Message msg) { Debug.Assert(t.IsInstanceOfType(obj)); MessageHandlerCacheAttribute cache = (MessageH…

MessageHandlerCacheAttribute

というわけで、一番簡単そうな呼び出しの高速化をはかるため、メッセージハンドラの検索をキャッシュするアトリビュートを作成してみます。 [AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct, Inherited = false, AllowMultiple = false)] p…

Attributeは自分が適用された先を知っているのか?

これは、上記の問題のすべてを解決するのに便利な情報なのですが、System.Attribute クラスにはそれらしいメンバーが定義されていません。 System.AttributeUsageAttribute は System.Attribute の派生クラスにたいしてしか指定できないので、そういう機能が…

呼び出し毎のメソッド検索が低速(たぶん)

毎回すべてのメソッドを検索するのは遅いでしょう。事前にメッセージIDをキーにしたハッシュテーブルなどにメソッドを保持しておくのがよいでしょうね。 メッセージとメソッドの関係はクラスが定義された時点で決定されるので、C++ならテンプレートを使って…

実は Message パラメータが参照渡しになっていない

これも Delegate の Invoke をみると、Message& となっていましたので、unsafe で &msg を渡すようにするんでしょうか?

どんなシグネチャのメソッドでも指定できる

delegate みたいなことすりゃいいんでしょうけど、型は native int だし、よくわからないのです。次の勉強のテーマとしてはよさそうですが。

MessageHandlerAttribute の既知の問題

どんなシグネチャのメソッドにも指定できる 実は Message パラメータが参照渡しになっていない 呼び出し毎のメソッド検索が低速(たぶん) 前途多難です。