Input_file

Class of port models of input files

[ libohymos | Source | Keywords | Summary | Ancestors | All Members | Descendants ]

Quick Index

DESCRIPTION

Class Summary

class Input_file : public Input_port
{

public:
char* Data_pack_type(void) ;
void* Make_data_pack(char* line_data) ;
void Input_data(void);
void Creq(void) ;
void Cprint(FILE* fp_out, char* head);
void Oprint(FILE* fp_out , char* head );
Boolean Init(char* f_name) ;
Input_file(char* f_name);
Input_file(void);
~Input_file(void);
protected:
time_t file_time_at_input;
}; // Input_file

Back to the top of Input_file


DESCRIPTION

An object of Class Input_file stores

Object::object_name
input file name
file_time_at_input
final update time of the input file

and has

function to read in data and send them as datapacks to the send port

入力ファイル用送信端子モデルは, 送信端子のみを持つ要素モデルであると 解釈することもできます。すなわち, このモデルは, ファイルからデータを 読み込み,データパックに変換して送信端子にデータパックをストックしま す。

実際には, 入力ファイル用送信端子モデルは, 要素モデルの一つとしてモデ ル化されずに, 送信端子モデルの派生モデルとして実現されています。すな わち, 送信端子モデルにファイル読みとり機能を追加して, 入力ファイル用 送信端子モデルが作成されています。クラス Input_file に関連する派生関 係はつぎのようです。


        Object <-- Port <--+
                           |
     +---------------------+
     |
     +---   Send_port <-- Input_port <-- Input_file   <--+-- I_file
                                                         |
                                         Port_type <--+
    

    クラス Input_file では,
        ・入力ファイル名             : Object::object_name
        ・入力ファイルの最終更新時刻 : file_time_at_input
    を記憶し,
        ・入力ファイルからのデータパック送信機能
    を定義しました.
    

Back to the top of Input_file


time_t file_time_at_input;

final update time of the input file

入力ファイルの最終更新時刻。

あたらしいデータが取得されたときに、同じ名前の入力ファイルファ イルに追加書きするか、書き変えられると想定しています。そのた めに、データを読みこんだときに、ファイルの最終更新時刻を記録 しておき、つぎにファイルを読む必要が生じたときに、ファイルの 最終更新時刻を見て、ファイルが更新されたか検査するようにしま す。

  time_t file_time_at_input;

Back to the top of Input_file


char* Data_pack_type(void) ;

送信デ−タパック型を表す文字列を返す

Send_port の純粋仮想関数ですが, Input_file でも純粋仮想関数として おきます. Input_file の派生クラスで, 送信データパック型を表す文字 列へのポインタを返すように必ず定義して下さい.

例えば, 送信データパック型が "INT" である派生クラスでは, char* Data_pack_type(void) { return "INT"; } のように定義します.

接続時, リンク時には, 送信先端子の Data_pack_type と, この端子の Data_pack_type とが一致することを確認します.

     RETURN:
     ・char*     送信データパック型を表す文字列へのポインタ.
     

  virtual char* Data_pack_type(void) = NULL;

Back to the top of Input_file


void* Make_data_pack(char* line_data) ;

文字列データからデータパックを作成する。純粋仮想関数。派生ク ラスで実装することが要求されています。

1行分文字列データを1個のデータパックに変換する関数を派生クラス で定義して下さい.

標準的な派生クラスでは, 送信データパック型に応じて次の手続きを定 義して下さい.

     (1) 送信用データパックの記憶領域をヒープに生成する.
     (2) 文字列 line_data からデータ記録時刻, データ値を読み取る.
     (3) (2) で読み取った値を (1) のデータパックのメンバに代入する.
     (4) (1) のデータパックのポインタを void* 型にキャストして返す.
     

純粋仮装関数なので, 派生クラスで必ず定義して下さい.

     ARGUMENT:
      ・line_data     入力データ1行分の文字列.
     RETURN:
      ・void*         送信データパックへのポインタを void* 型にキャ
                      ストしたもの.
     

  virtual void* Make_data_pack(char* line_data) = NULL;

Back to the top of Input_file


void Input_data(void);

入力ファイルを読み取り, Input_file::Make_data_pack によりデー タパ ックを作成し, 作成したデータパックを Send_port::Stock を 用いて送信します.

入力ファイルを読み取り, Input_file::Make_data_pack によりデータパ ックを作成し, 作成したデータパックを Send_port::Stock を用いて送信 します.

ここで行頭が '\n', '#' の場合, 空行, コメント行と見なします.

ファイル末尾まで処理が終了したら, Send_port::Send_data_pack_array を用いて data_pack_array を作成します.

ただし, 入力ファイルの最終変更時刻が file_time_at_input 以前の場合 は何もせず return します. コンストラクタで file_time_at_input は LONG_MIN に設定されるので, 初回の入力は必ず実行されます.

     EXIT:
     ・Level 3   入力ファイル object_name をオープンできない場合.
     ・Level 5   読み取り作業用文字列をヒープに確保できない場合.
     ACCIDENT:
     ・データの記述に誤りがある場合.
     ・関数 Input_file::Make_data_pack の実装に誤りがある場合.
     

  virtual void Input_data(void);

Back to the top of Input_file


void Creq(void) ;

Relay the calculation request to the owner element

  void Creq(void)                                                                                                 
;

Function is currently defined inline.


Back to the top of Input_file


void Cprint(FILE* fp_out, char* head);

オブジェクト情報の出力 (owner の情報含まず)

入力ファイル名とこの端子の送信元受信端子の情報をファイル fp に出力します.

関数 Cprint はクラス Object の仮想関数なので, 派生クラスごとに変更 できます.

Object::Cprint が多重定義されているため, fp_out を引数に渡さない場 合は stderr に出力され, この時, head も引数に渡さなければ head は 4カラムに設定されます.

     ARGUMENT:
       ・fp_out    オブジェクト情報を出力するファイルへのポインタ.
                   引数に渡さない場合 stderr となる.
       ・head      コメント文字列へのポインタ.
                   fp_out を渡さない場合のデフォルト値は4カラム.
     

  void Cprint(FILE* fp_out, char* head);

Back to the top of Input_file


void Oprint(FILE* fp_out , char* head );

オブジェクト情報の出力 (owner の情報含む)

  void Oprint(FILE* fp_out = stderr, char* head = "    ");

Back to the top of Input_file


Boolean Init(char* f_name) ;

初期化機能.

引数を f_name, 0 として, Input_port::Init を実行します. 端子 番号は, 0 に設定します.

     RETURN
       ・YES       初期化が成功した場合
       ・NO        初期化が成功しなかった場合
     ARGUMENT:
       ・f_name    入力ファイル名.
     EXIT:
       ・5         object_name の記憶領域が確保できない場合.
     

  Boolean Init(char* f_name)                     ;

Function is currently defined inline.


Back to the top of Input_file


Input_file(char* f_name);

コンストラクタ。引数は、ファイル名。

Input_port(char*) は, 基底クラス Input_port のデフォルトコンスト ラクタを用い, Input_file::Init を用いて, メンバを以下の通り初期化 します.

     ・class_name            : "Input_file"
     ・object_name           : f_name (ヒープにコピー)
     ・object_number         : 0
     ・owner                 : NULL
     ・buffer_list           : ヒープに確保する. (接続作業用)
     ・receiver_array        : NULL
     ・number_of_receivers   : -1
     ・data_pack_array       : NULL
     ・number_of_data_packs  : -1
     ・file_time_at_input    : LONG_MIN
     

  Input_file(char* f_name);

Back to the top of Input_file


Input_file(void);

コンストラクタ。必要な情報は、後で、Init で与えることにして、 とりあえず construct するためのもの。

  Input_file(void);

Back to the top of Input_file


~Input_file(void);

Destructor

  ~Input_file(void);

Back to the top of Input_file


All Members

public:
char* Class_name(void) ;
char* Object_name(void) ;
int Object_number(void) ;
void* Owner(void) ;
Boolean Compare(char* c_name, char* o_name, int o_num);
Boolean Compare(char* o_name, int o_num);
Boolean Compare(Object* obj);
Boolean Set_owner(void* o);
void Cprint(FILE* fp_out, char* head);
void Cprint(FILE* fp_out) ;
void Cprint(char* head ) ;
void Oprint(FILE* fp_out, char* head);
void Oprint(FILE* fp_out) ;
void Oprint(char* head ) ;
void Absname( char* absname );
Boolean Init(char* o_name, int o_num);
char* Data_pack_type(void) ;
Boolean Set_sender(void* s);
Boolean Register_receiver(void* r);
Boolean Switch(void);
Boolean Are_you_ready(void) ;
void Creq(void) ;
void Set_data_pack_array(void) ;
Boolean Can_you_get_data(time_t t_from, time_t t_to) ;
Boolean Can_you_get_data(time_t t) ;
void Get_data_pack_array(void**& dp_array, int& num_of_dp) ;
time_t Oldest_data_time(void) ;
time_t Newest_data_time(void) ;
int Number_of_data_packs(void) ;
Boolean Get_data_pack( void*& former, time_t data_time, void*& later, char flag) ;
Boolean Get_data_pack(void*& former, time_t data_time) ;
Boolean Get_data_pack(time_t data_time, void*& later) ;
time_t Necessary_time_from(void) ;
time_t Necessary_time_to(void) ;
void Reduce_data_pack_stock(void) ;
void Print_connection(FILE* fp_out, char* head);
void Print_connection(FILE*) ;
void Print_connection(char* head ) ;
Port* NewPort(); // pure virtual
Boolean Init(char* p_name, int p_num) ;
void Set_comment_string(char* cmt);
char* Get_comment_string(void);
void Stock(void* d_pack);
void Send_by_string(char*& dstr) ;
Boolean Get_data_pack(void*& former, time_t data_time, void*& later, char flag );
void Forget_data_pack_stock(time_t t_from);
Boolean Set_protect_past_data_flag(Boolean pflag) ;
void Clear_data_pack(void);
void Save_send_port_stock(FILE* fp);
void Input_data(void) ;
void* Make_data_pack(char* line_data) ;
void Oprint(FILE* fp_out , char* head );
Boolean Init(char* f_name) ;
protected:
char* class_name;
char* object_name;
int object_number;
void* owner;
List* buffer_list;
void** receiver_array;
int number_of_receivers;
char* comment_string;
void** data_pack_array;
int number_of_data_packs;
Boolean protect_past_data_flag;
time_t file_time_at_input;

Back to the top of Input_file


Ancestors

Inheritance chain for Input_file:

Back to the top of Input_file


Descendants

Back to the top of Input_file


Generated from source by the Cocoon utilities on Sun Sep 3 22:52:02 2000 .

Report problems to jkotula@stratasys.com