ネームスペース¶
ネームスペースは、一般名前有効範囲を区切り、セルタイプ、シグニチャの名前衝突を防ぐために用いられます。
【記述例】
namespace nNS {
signature sSig {
void func( void );
};
[active]
celltype tCelltype {
entry sSig eEntry;
};
};
cell nNS::tCelltype Cell {
};
ここで namespace はキーワードであり、nNS はネームスペース名です。'{', '}' に囲まれた中に、シグニチャ (signature)、セルタイプ (celltype) を記述します。
慣習として、ネームスペース名は 'n' で始めます。
同じネームスペース名を持つネームスペースを、繰り返し記述することができます。
ネームスペースは、再帰的に設けることができます。
【補足説明】ネームスペースは、セルタイプとシグニチャのみに用いる。セルは、リージョンの下に置く。名前衝突回避とともにセルのレイアウト制御を行う。
- 【補足説明】以下のものも、ネームスペース下に置くことができない。
構造体 (struct) タグ
型定義 (typedef) された型名
定数 (const)
列挙型 (enum)
これらを TECS CDL でネームスペース下に置くことに技術的困難はないが、C 言語の生成コードにおいて短縮して記述する方法がなく、グローバル名を使用することになり利便性がないため。
ネームスペース識別子¶
ネームスペース識別子は、ネームスペースに属するシグニチャやセルタイプを、異なるネームスペースから参照する際に用います。 シグニチャ名、セルタイプ名を指定する箇所で、ネームスペース識別子を用いることができます。
リージョンは、ネームスペースと同様に名前有効範囲を区切ります。 従ってセル名を指定する箇所でも、ネームスペース識別子を用いることができます。
【記述例】
nNS::sSig
nNS::tCelltype
ネームスペース識別子は、一般名前有効範囲に属する物を参照するときに使用します。 ネームスペース識別子には、以下の3種類があります。
種類 |
参照する対象 |
記述例 |
---|---|---|
単一の識別子 |
同じネームスペース、または親ネームスペースに存在する物を参照。 同じネームスペースの物が優先されます。親ネームスペースにも存在しない場合、 更にその親ネームスペースを再帰的に探索していき、見つかった物を参照します。 |
tCelltype sSignature |
絶対パス指定 |
ルートネームスペース (ルートリージョン) から指定して、物を参照。 |
::nNS::tCelltype ::rRegion::rSubRegion::Cell |
相対パス指定 |
入れ子の内側のネームスペースに存在する物、または親ネームスペースに存在する物を参照。 '::' で区切られた最初の識別子を名前とするネームスペースが同一ネームスペースになければ、 親ネームペースを再帰的に探索します。 入れ子の内側へ向かって再帰的な探索は行われません。 |
nNS::sSignature nNS::nSubNS::tCelltype |
単一の識別子、および相対パス指定の先頭の識別子と一致するものがネームスペース内にないとき、上位のネームスペースから探索します。