view paper/interface.tex @ 9:ddf62b739703

update
author mir3636
date Fri, 25 Jan 2019 03:48:23 +0900
parents 3d42e57b60f9
children 9295b0c90a84
line wrap: on
line source


\chapter{Interface}
Interface は Gears OS のモジュール化の仕組みである。 
Interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。
呼び出される Code Gear の引数となる Data Gear はここで全て定義される。

ソースコード\ref{interface}は Stack の Interface である。
\_\_code で記述されているものは Stack が実装するべき push や pop などの Code Gear、
union Data で記述されているものは、Stack の Code Gear の引数の Data Gear である。 

\lstinputlisting[label=interface, caption=StackのInterface]{./src/Stack.cbc}


通常 Code Gear、Data Gear に参照するためには Context を通す必要があるが、
Interface を記述することでデータ構造の API と Data Gear を結びつけることが出来る。

\section{Interface の実装}
ソースコード\ref{implement}は Stack の実装の例である。
create の関数は 実装の初期化である。
ソースコード\ref{implement} 6〜12行目で実装の Code Gear に代入しているものは Context が
持つ enum で定義された Code Gear の番号である。
ソースコード \ref{Gears_code} 3行目で stack->pop へと goto しているが、
stack->pop には Code Gear の番号が入っているため実装した Code Gear へと継続する。
このため、ソースコード \ref{Gears_code} では 6行目の popSingleLinkedStack へと継続している。

\lstinputlisting[label=implement, caption=SingleLinkedStackの実装]{./src/stackimpl.cbc}