ネームスペース
ネームスペースは、一般名前有効範囲を区切り、セルタイプ、シグニチャの名前衝突を防ぐために用いられます。
【記述例】
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 |
絶対パス指定 | ルートネームスペース (ルートリージョン) から指定して、物を参照。 |
::nNS::tCelltype |
相対パス指定 | 入れ子の内側のネームスペースに存在する物、または親ネームスペースに存在する物を参照。
'::' で区切られた最初の識別子を名前とするネームスペースが同一ネームスペースになければ、 |
nNS::sSignature |
単一の識別子、および相対パス指定の先頭の識別子と一致するものがネームスペース内にないとき、上位のネームスペースから探索します。