-
Notifications
You must be signed in to change notification settings - Fork 31
Hook
Ryota Shioya edited this page Mar 24, 2022
·
2 revisions
- 鬼斬では,ユーザーによるモジュールを拡張するための仕組みとしてHook と呼ぶ仕組みを用意している.
- Hook は,フェッチやリネームと言ったシミュレータ本来の処理を横取り(フック)するための仕組みである.
- 任意のオブジェクトとメソッドのペアをHook に登録することにより,本来の処理を横取りできる.
- Hook を用いることにより,ユーザーはモジュールに直接手を加えることなく,シミュレータの拡張を行える.
- 主な実装は/src/Sim/Hook/Hook.h にある
- 各箇所に儲けられたHook オブジェクトに対し,
- Register でオブジェクトとメソッドを登録
- Trigger で登録されたメソッドが呼び出される
- Fetcher によるフェッチをフックする場合について述べる
- 以下は,Fetcher で定義されているフックfetchHook に対し,MyFetcher::Fetch を登録する場合の例である.
- メソッドのポインタを登録する際は,MyFetcher::Fetch の様にクラス名を付加しなければならない点に注意
HookPoint<Fetcher> Fetcher::s_fetchHook
//----
MyFetcher
{
public:
void Fetch( HookParameter<Fetcher> param )
{
}
}
//----
MyFetcher myFetcher;
Fetcher::s_fetchHook.Register( &myFetcher, &MyFetcher::Fetch, 0 );