Chapter 44. IO インターフェイスとオペレーション

Table of Contents
基本形としての IO::Adapter
メソッド / operation vector
議論

移植性や拡張性のためには UNIX における Vnode/VFS interface (vnode(9)参 照)のような構造をあらゆるレイヤーに導入する必要があります。

struct vnode {
		...
        voff_t          v_size;                 /* size of file */
        int             v_numoutput;            /* num pending writes */
        long            v_writecount;           /* ref count of writers */
		...
        int             (**v_op)(void *);       /* vnode ops vector */
		...
        void            *v_data;                /* private data for fs */
};
v_op の先に、 vop_open() vop_read() vop_getattr() などが定義されています。

つまり struct vnode の **v_op (vnode operation vector) にあたるものが IO に使われるクラスの各メソッドです。たとえば、IO::Adapter はユーザリ ストというオブジェクトに対する IO インターフェイスを抽象化したものです。

基本形としての IO::Adapter

fml8 全体の基調となる型は IO::Adapter といえるでしょう。実装もすでに完成形であり、primitive なメソッドは何か などについて十分考えられています。

IO::Adapter クラスは

KEY => VALUE
もしくは
KEY => [ VALUE, VALUE2, VALUE3 ]
のいづれかの型のデータ構造を抽象化していると考えられます。 つまり、これは RDBMS の基礎理論同様の表型のデータ構造です。

KEY1 VALUE1-1 ""     ""
KEY2 VALUE2-1 VALUE2-2 VALUE2-3
KEY3 VALUE3-1 VALUE3-2 VALUE3-3
KEY4 VALUE4-1 VALUE4-2 VALUE4-3

ユーザリストを管理する上で必要最低限の基本メソッド群は、 IO::Adapter の裏にあるオブジェクト本体を呼びだすための

open()
close()
および、そのオブジェクトへの IO である
add(KEY, ARGV) (ARGV はクラス依存のデータ渡しのためにある引数)
delete(KEY)
find(KEY or REGEXP)
get_next_key()
があれば十分のようです。 少なくとも、ユーザ管理はこれらだけで十分書けます。

fml 8.0 (fml-devel) project homepage is www.fml.org/software/fml-devel/.
fml 4.0 project homepage is www.fml.org/fml/menu.ja.html.
about one floppy bsd routers, see www.bsdrouter.org/.
other free softwares are found at www.fml.org/software/.

author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.

For questions about FML, e-mail <fml-bugs@fml.org>.