ODM コードおよび出力の例

次の「Fictional_Characters」、「Friend_Table」、および「Enemy_Table」のオブジェクト・クラスと関係の表は、ここのセクションのコード例で作成したオブジェクト・クラスおよびオブジェクト を示しています。

表 1. Fictional_Characters
Story_Star (char) Birthday (char) Age (short) Friends_of (link) Enemies_of (link) Do_This (method)
Cinderella Once upon a time 19 Cinderella Cinderella echo Cleans House
Snow White Once upon a time 18 Snow White Snow White echo Cleans House
表 2. Friend_Table
Friend_of (char) Friend (char)
Cinderella Fairy Godmother
Cinderella mice
Snow White Sneezy
Snow White Sleepy
Cinderella Prince
Snow White Happy
表 3. Enemy_Table
Enemy_of (char) Enemy (char)
Cinderella midnight
Cinderella Mean Stepmother
Snow White Mean Stepmother

オブジェクト・クラスを作成するための ODM 入力コード例

次の MyObjects.cre ファイルのコード例では、 odmcreate コマンドで入力ファイルとして使用される際に 3 つのオブジェクト・クラスが作成されます。

*      MyObjects.cre
*       An input file for ODM create utilities.
*       Creates three object classes:
*               Friend_Table
*               Enemy_Table
*               Fictional_Characters

class   Friend_Table {
        char    Friend_of[20];
        char    Friend[20];
};
class   Enemy_Table {
        char    Enemy_of[20];
        char    Enemy[20];
};
class   Fictional_Characters {
        char    Story_Star[20];
        char    Birthday[20];
        short   Age;
        link    Friend_Table Friend_Table Friend_of Friends_of;
        link    Enemy_Table Enemy_Table Enemy_of Enemies_of;
        method  Do_This;
};
* End of MyObjects.cre input file for ODM create utilities. *

Fictional_Characters オブジェクト・クラスには、 6 つのディスクリプターが入っています。

  • それぞれディスクリプター・タイプが char で最大長が 20 文字 の、Story_Star および Birthday
  • ディスクリプター・タイプが short (短) の Age
  • Friends_of および Enemies_of は両方ともリンク・クラスに属し、 事前に定義された 2 つのオブジェクト・クラスにリンクします。
    注: オブジェクト・クラス・リンクは 2 回繰り返されます。
  • ディスクリプター・タイプがメソッド (method) である Do_This

ODM で必要なオブジェクト・クラス・ファイルを作成するには、 odmcreate コマンドを用いて、このコードの入ったファイルを処理しなければなりません。

オブジェクト・クラス定義のための ODM 出力例

MyObjects.cre ファイルのコードを odmcreate コマンドで処理すると、.h ファイルに次の構造体が生成されます。

* MyObjects.h
* The file output from ODM processing of the MyObjects.cre input
* file. Defines structures for the three object classes:
*       Friend_Table
*       Enemy_Table
*       Fictional_Characters
#include <odmi.h>

struct  Friend_Table {
       long     _id;     * unique object id within object class *
       long     _reserved;  * reserved field *
       long     _scratch;   * extra field for application use *
       char     Friend_of[20];
       char     Friend[20];
};
#define Friend_Table_Descs 2
extern struct Class Friend_Table_CLASS[];
#define get_Friend_Table_list(a,b,c,d,e) (struct Friend_Table * )odm_get_list (a,b,c,d,e)
struct  Enemy_Table {
        long    _id;
        long    _reserved;
        long    _scratch;
        char    Enemy_of[20];
        char    Enemy[20];
};
#define Enemy_Table_Descs 2
extern struct Class Enemy_Table_CLASS[];
#define get_Enemy_Table_list(a,b,c,d,e) (struct Enemy_Table * )odm_get_list (a,b,c,d,e)

struct  Fictional_Characters {
        long    _id;
        long    _reserved;
        long    _scratch;
        char    Story_Star[20];
        char    Birthday[20];
        short   Age;
       struct  Friend_Table *Friends_of;    * link *
        struct  listinfo *Friends_of_info;   * link *
        char    Friends_of_Lvalue[20];       * link *
        struct  Enemy_Table *Enemies_of;     * link *
        struct  listinfo *Enemies_of_info;   * link *
        char    Enemies_of_Lvalue[20];       * link *
        char    Do_This[256];                * method *
};
#define Fictional_Characters_Descs 6
 
extern struct Class Fictional_Characters_CLASS[];
#define get_Fictional_Characters_list(a,b,c,d,e) (struct Fictional_Characters * )odm_get_list (a,b,c,d,e)

* End of MyObjects.h structure definition file output from ODM    * processing.

オブジェクト・クラスにオブジェクトを追加するための ODM コード例

次のコードを odmadd コマンドで処理すると、MyObjects.cre 入力ファイルを処理して作成されるオブジェクト・クラスにオブジェクトを組み入れることができます。

* MyObjects.add
* An input file for ODM add utilities.
* Populates three created object classes:
*       Friend_Table
*       Enemy_Table
*       Fictional_Characters
Fictional_Characters:
Story_Star = "Cinderella" #a comment for the  MyObjects.add file.
Birthday        =       "Once upon a time"
Age             =       19
Friends_of      =       "Cinderella"
Enemies_of      =       "Cinderella"
Do_This =               "echo Cleans house"

Fictional_Characters:
Story_Star      =       "Snow White"
Birthday        =       "Once upon a time"
Age             =       18
Friends_of      =       "Snow White"
Enemies_of      =       "Snow White"
Do_This   =              "echo Cleans house"

Friend_Table:
Friend_of       =       "Cinderella"
Friend          =       "Fairy Godmother"

Friend_Table:
Friend_of       =       "Cinderella"
Friend          =       "mice"
Friend_Table:
Friend_of       =       "Snow White"
Friend          =       "Sneezy"
Friend_Table:
Friend_of       =       "Snow White"
Friend          =       "Sleepy"
Friend_Table:
Friend_of       =       "Cinderella"
Friend          =       "Prince"
Friend_Table:
Friend_of       =       "Snow White"
Friend          =       "Happy"
Enemy_Table:
Enemy_of        =       "Cinderella"
Enemy           =       "midnight"
Enemy_Table:
Enemy_of        =       "Cinderella"
Enemy           =       "Mean Stepmother"

Enemy_Table:
Enemy_of        =       "Snow White"
Enemy           =       "Mean Stepmother"

* End of MyObjects.add input file for ODM add utilities. *

注: 上記のコード例の * (アスタリスク) または # (ポンド記号) コメントは、 オブジェクト・ファイルには入りません。 行の先頭に原因があってその行がコメント化された場合、そのコマンドはオブジェクト・ファイルには入りません。 コメントは、ファイルに組み込まれ、 " " (二重引用符) で囲まれた場合は、文字列として扱われます。