[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
定義済みユニットの実装にはいくつかのサポートクラスが使用されている。サ ポートクラスはISIS内部だけでなく、ISIS外部でも使用できるような一般的な クラスライブラリである。
現在、以下のサポートクラスが実装されている。
4.1 root_objectクラス 4.2 c_arrayクラス 4.3 bitvectorクラス 4.4 cyclic_queueクラス 4.5 limited_counterクラス 4.6 argument_parserクラス 4.7 gdb_portクラス
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
root_object
クラスは抽象クラスであり、その派生クラスに対してオブ
ジェクトの複製、ストリーム入出力機能、不変式チェックのインタフェースを
規定する働きを持つ。このクラスを基底クラスとしてクラス階層を形成するこ
とで、クラス階層内でのオブジェクトの複製やストリーム入出力などについて
のインタフェースを統一することができる。ISISのハードウェアユニットは
root_object
クラスの提供するインタフェースを通じてオブジェクトの
複製やストリーム入出力を行う場合が多い。
root_object
クラスは以下の純粋仮想関数及び仮想関数を持つ。具体派
生クラスは全ての純粋仮想関数に定義を与える必要がある。また、必要があれ
ばその他の仮想関数に定義を与えることができる。
int check_invariant(void) const
root_object* new_object(void) const
derived_class : public root_object { public: virtual root_object* new_object(void) const; }; root_object* derived_class::new_object(void) const { return new derived_class; } |
root_object* clone_object(void) const
derived_class : public root_object { public: virtual root_object* new_object(void) const; }; root_object* derived_class::new_object(void) const { return new derived_class(*this); } |
void input(istream&)
void output(ostream&) const
root_object
を仮想基底クラスとした場合、new_object
関数、
clone_object
関数は使用できない。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
指定された型のオブジェクトを配列状に格納するコンテナクラスである。ほぼ
STLのvector
クラスと互換のインタフェースを持つが、配列サイズは固
定である。実行時コストは組み込み配列と等価である。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
bool型の要素を配列状に格納するコンテナクラスである。ほぼSTLの
bitset
クラスと互換のインタフェースを持つが、配列サイズは可変で
ある。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
指定された型のオブジェクトを配列状に格納する待ち行列のコンテナクラスで
ある。ほぼSTLのqueue
クラスと互換のインタフェースを持つ。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ある限定された範囲の値をとるカウンタを表すクラス。値の型をパラメータと
するテンプレートクラスである。値の操作はインクリメント、デクリメントの
みを行うことができる。カウンタの最小値は0で、最大値は任意の正の整数を
設定する。指定しなければ1である。++
、--
演算子もサポート
されている。
value_type max(void) const
value_type value(void) const
bool is_max(void) const
const limited_counter& increment(void)
const limited_counter& declement(void)
void clear(void)
void set_max(value_type)
bool check_invariant(void) const
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドライン引数を解釈し、参照しやすいデータベースを作成するクラス。
`-<char>'、`-<char><value>'、`--<str>'、
`--<str>=<value>' の4つの形式のオプションをサポートする。オプショ
ンおよび非オプションはどのような順序で記述されていても構わない。すべて
のオプションがデータベースに登録され、非オプションはmain
関数の
第二引数と同様の形式の文字列の配列としてまとめて登録される。例外として、
コマンドライン中に--
が指定されていた場合には、それ以降の引数が
すべて非オプションとして取り扱われる。
`-<char>'と`--<str>'は真または偽のブール値、
`-<char><value>'と`--<str>=<value>'は文字列値を持つ。ブー
ル値が真かどうかを参照するにはdefined
メンバ関数、文字列値の参照
には[]
演算子を用いる。それぞれ、`-<char>'形式の値を見る
場合には文字型、`--<str>'形式の値を見る場合には文字列をキーとし
て渡す。defined
関数は真または偽を返す。[]
演算子は値が定
義されていれば文字列値を、値が未定義であればNULL
を返す。
コマンドライン引数の入力は、コンストラクタの引数もしくはset
メン
バ関数で行う。通常はmain
関数の第二引数argv
に1を加えた値
を渡すと良い。こうすることで、そのプログラム自身を示す文字列以外のコマ
ンドライン引数をデータベース化させることができる。
以下に簡単な例を示す。この例では、`-c'で総クロック数の出力、 `-p<n>'でプロセッサ数指定、`--verbose'で冗長出力、 `--stdout=<file>'で標準出力ファイルを指定できるように設定してい る。
int main(int, char** argv) { bool clock_flag = false, verbose_flag = false, punum = true; char* stdout_filename = NULL; argument_parser arg(argv + 1); if (arg.defined('c')) clock_flag = true; if (arg['p'] != NULL) punum = atoi(arg['p']); if (arg.defined("verbose")) verbose_flag = true; if (arg["stdout"] != NULL) stdout_filename = arg["stdout"]; /* ... */ } |
void set(const char* const)
void clear(void)
bool defined(char) const
bool defined(const char*) const
const char* operator[](char) const
const char* operator[](const char*) const
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
gdbとの通信を処理するクラス。TCPおよびUDPによる通信、パケットのエンコー
ドとデコードをサポートする。通信はsend
とreceive
メンバ関
数のみで行う。パケットを送信した時のアクノリッジの受信、パケットを受信
した時のアクノリッジの送信は自動で行われる。
use_tcp
またはuse_udp
でプロトコルを設定す
る。
set_port
でポート番号を設定する。
setup
で初期設定を行う。戻り値が真ならば初期化成功。
connect
でクライアントからの接続を待つ。
send
およびreceive
で通信を行う。
disconnect
で通信路を切断する。
shutdown
で終了する。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |