GearsOSのマクロ
Gearef
#define Gearef(context, t) (&(context)->data[D_##t]->t)
contextが持つDataGearの集合からtに割り振られたデータを取得する
GearImpl
#define GearImpl(context, intf, name) (Gearef(context, intf)->name->intf.name)
interfaceを実装しているインスタンスにアクセスすることが可能となるマクロ
BoundedBuffer* buffer = (BoundedBuffer*)GearImpl(context, Buffer, buffer);
小文字の型名に実際の実装が入っている実装で書いているので末尾の intf.name でアクセス可能
code:hoge.c
SemaphoreImpl* semaphore = (SemaphoreImpl*)((&(context)->dataD_Semaphore->Semaphore)->semaphore->Semaphore.semaphore); enum Code next = (&(context)->dataD_Semaphore->Semaphore)->next;