| 1 | = 複合セルタイプ記述 = |
| 2 | |
| 3 | 複合セルタイプは、1つ以上のセルを組合わせて新しいセルタイプを定義するものです。 |
| 4 | 複合セルタイプは、複数のセルを組合わせる目的以外に、属性の初期値を与えたり、固定結合させるのに用いることもできます。 |
| 5 | |
| 6 | 【記述例】 |
| 7 | |
| 8 | {{{ |
| 9 | [singleton] // 複合セルタイプの指定子 |
| 10 | composite tCompositeCelltype { // composite キーワードと複合セルタイプ名 |
| 11 | entry sSignature eEntry; // entry キーワード、対応付けられたシグニチャ名、受け口名 |
| 12 | call sSignature cCall; // call キーワード、対応付けられたシグニチャ名、呼び口名 |
| 13 | attr { // 属性 |
| 14 | int32_t val = 10; |
| 15 | }; |
| 16 | |
| 17 | // 内部セル |
| 18 | cell tCelltype Cell1 { |
| 19 | cCellCall = Cell2.eEntry; // 内部セルへの結合 |
| 20 | val = composite.val; // 属性のエクスポート |
| 21 | }; |
| 22 | cell tCelltype Cell2 { |
| 23 | cCall => composite.cCall; // 呼び口のエクスポート |
| 24 | }; |
| 25 | composite.eEntry => cell2.eEntry; // 受け口のエクスポート |
| 26 | |
| 27 | }; |
| 28 | }}} |
| 29 | |
| 30 | 複合セルタイプは、セルタイプと同様に、呼び口、受け口、属性、内部セルを持ちます。 |
| 31 | 複合セルタイプに組み入れられるセルを「内部セル」と呼びます。 |
| 32 | |
| 33 | 複合セルタイプに属するセルの生成は、複合セルタイプの内部セルのコピーが作成されるとともに、呼び口の結合先や、属性の初期値が整えられます。 |
| 34 | |
| 35 | == 複合セルタイプの指定子 == |
| 36 | |
| 37 | === active 指定子 === |
| 38 | |
| 39 | active 指定子は、少なくとも一つの内部セルのセルタイプがアクティブである場合、指定する必要があります。 |
| 40 | |
| 41 | === singleton 指定子 === |
| 42 | |
| 43 | singleton 指定子は、少なくとも一つの内部セルのセルタイプがシングルトンである場合、指定する必要があります。 |
| 44 | |
| 45 | singleton 指定子は、内部セルのセルタイプにシングルトンのものがない場合でも指定できます。 |
| 46 | この場合、複合セルタイプのセルは、1つだけ定義することができます。 |
| 47 | |
| 48 | == 受け口 == |
| 49 | |
| 50 | 複合セルタイプの受け口は、内部セルの呼び口を複合セルタイプの受け口としてエクスポートするものです。 |
| 51 | 受け口配列とすることもできます。 |
| 52 | |
| 53 | == 受け口の指定子 == |
| 54 | |
| 55 | === allocator 指定子 === |
| 56 | |
| 57 | allocator 指定子は、リレーアロケータまたは内部アロケータを指定するものです。 |
| 58 | |
| 59 | ==== リレーアロケータの指定 ==== |
| 60 | |
| 61 | 【記述例】 |
| 62 | {{{ |
| 63 | composite tCompRelayAlloc { |
| 64 | [allocator( func.a <= cCallExt.func.a, |
| 65 | func2.buf <= cCallExt.func2.buf )] |
| 66 | entry sSig eEntExt; |
| 67 | call sSig cCallExt; |
| 68 | |
| 69 | cell tRelay Cell1 { |
| 70 | cCall => composite.cCallExt; |
| 71 | }; |
| 72 | |
| 73 | composite.eEntExt => Cell1.eEnt; |
| 74 | }; |
| 75 | }}} |
| 76 | |
| 77 | T.B.W. |
| 78 | |
| 79 | ==== 内部アロケータの指定 ==== |
| 80 | |
| 81 | 【記述例】 |
| 82 | {{{ |
| 83 | composite tCompAlloc { |
| 84 | entry sAlloc eAlloc; |
| 85 | [allocator( |
| 86 | func.a=eAlloc, |
| 87 | func2.buf=eAlloc)] |
| 88 | entry sSig eEntExt; |
| 89 | attr { |
| 90 | int32_t num; |
| 91 | }; |
| 92 | |
| 93 | [allocator( |
| 94 | eEnt.func.a=Alloc.eA, |
| 95 | eEnt.func2.buf=Alloc.eA)] |
| 96 | cell tCt1 Cell1 { |
| 97 | num = composite.num; |
| 98 | }; |
| 99 | |
| 100 | cell tAlloc Alloc{ |
| 101 | num = composite.num; |
| 102 | }; |
| 103 | |
| 104 | cell tAlloc Alloc2{ |
| 105 | num = composite.num; |
| 106 | }; |
| 107 | |
| 108 | composite.eEntExt => Cell1.eEnt; |
| 109 | composite.eAlloc => Alloc.eA; |
| 110 | }; |
| 111 | }}} |
| 112 | |
| 113 | T.B.W. |
| 114 | |
| 115 | === 使用しない指定子 === |
| 116 | |
| 117 | 以下の指定子は、複合セルタイプの受け口では指定しません。 |
| 118 | |
| 119 | * inline |
| 120 | |
| 121 | inline 指定子は、セルタイプの実装において必要になるもので、セルタイプの利用者にとって、必要な情報ではありません。 |
| 122 | |
| 123 | === 固定結合 === |
| 124 | |
| 125 | 複合セルタイプにおいても、セルタイプ同様に固定結合を指定できます。 |
| 126 | |
| 127 | 内部セルのセルタイプにおいても固定結合が指定されている場合、複合セルタイプでしてされた固定結合と内部セルのセルタイプにおいて指定された固定結合の両方とも結合されます。 |
| 128 | |
| 129 | == 呼び口 == |
| 130 | |
| 131 | 複合セルタイプの呼び口は、内部セルの呼び口を複合セルタイプの受け口としてエクスポートするものです。 |
| 132 | 呼び口配列とすることもできます。 |
| 133 | |
| 134 | == 呼び口の指定子 == |
| 135 | |
| 136 | === optional 指定子 === |
| 137 | |
| 138 | optional 指定子は、内部セルのセルタイプにおいて optional と指定された受け口をエクスポートする場合に指定します。 |
| 139 | |
| 140 | == 属性 == |
| 141 | |
| 142 | 複合セルタイプの属性は、内部セルの属性をエクスポートするものです。 |
| 143 | |
| 144 | 複合セルタイプの属性において初期値を与えることができます。 |
| 145 | この場合、内部セルの属するセルタイプの属性において指定された初期値を上書きします。 |
| 146 | |
| 147 | === C_EXP の名前置換 === |
| 148 | |
| 149 | composite における名前置換は、特別な規則が適用されます。 |
| 150 | composite の attr に現れる C_EXP における $id$, $ct$, $cell$ の名前置換では、複合セルタイプの名前、複合セルの名前に置換されます。 |
| 151 | 他の名前置換は、複合セルタイプの内部セルが展開されてコピーされたセルの名前によって置換されます。 |
| 152 | |
| 153 | 以下に、複合セルタイプにおける名前置換の例を示します。 |
| 154 | 次のような TECS CDL 記述があるものとします。 |
| 155 | |
| 156 | 【記述例】 |
| 157 | {{{ |
| 158 | composite tComposite { |
| 159 | attr { |
| 160 | int32_t a = C_EXP( "A_$id$" ); |
| 161 | }; |
| 162 | cell tCelltype Cell1 { |
| 163 | a = composite.a; |
| 164 | b = C_EXP( "B_$id$" ); |
| 165 | }; |
| 166 | cell tCelltype2 Cell2 { |
| 167 | a = composite.a; |
| 168 | c = C_EXP( "C_$id$" ); |
| 169 | }; |
| 170 | }; |
| 171 | |
| 172 | cell tComposite CompositeCell { |
| 173 | }; |
| 174 | }}} |
| 175 | |
| 176 | CompositeCell における、名前置換の結果は A_$id$ は "A_CompositeCell" に、B_$id$ は "B_CompositeCell_Cell" に、C_$id$ は "C_Composite_Cell2" となります。 |
| 177 | 属性 a は Cell1, Cell2 ともに、同じ初期値を持つことになります。 |
| 178 | |
| 179 | 【仕様決定の理由】この仕様は、タスクとタスク例外を別のセルとして生成し、それらを composite で一つのセルにまとめる際に、タスクの ID の名前を一致させるために導入された(他の用途でも使用してもよい) |
| 180 | |
| 181 | |
| 182 | == 属性の指定子 == |
| 183 | |
| 184 | === size_is 指定子 === |
| 185 | |
| 186 | size_is 指定子は、エクスポートする属性の、元のセルタイプ定義において指定されている場合に指定します。 |
| 187 | |
| 188 | === 使用しない指定子 === |
| 189 | |
| 190 | 以下の指定子は、複合セルタイプの属性では指定しません。 |
| 191 | |
| 192 | * omit |
| 193 | |
| 194 | omit 指定子は、セルタイプの実装において必要になるもので、セルタイプの利用者にとって、必要な情報ではありません。 |
| 195 | |
| 196 | == 内部セル == |
| 197 | |
| 198 | 内部セルは、複合セルタイプを構成するセルです。 |
| 199 | 複合セルタイプは、1個以上の内部セルを持ちます。 |
| 200 | |
| 201 | == 呼び口のエクスポート == |
| 202 | |
| 203 | 内部セルの呼び口を複合セルタイプの呼び口としてエクスポートできます。 |
| 204 | 内部セル内に記述します。 |
| 205 | |
| 206 | エクスポートするものが、受け口配列の場合、配列全体をエクスポートする必要があります。 |
| 207 | 特定の添数のみエクスポートすることはできません。 |
| 208 | |
| 209 | == 受け口のエクスポート == |
| 210 | |
| 211 | 内部セルの受け口を複合セルタイプの受け口としてエクスポートできます。 |
| 212 | 内部セルの外側に記述します。 |
| 213 | |
| 214 | エクスポートするものが、受け口配列の場合、配列全体をエクスポートする必要があります。 |
| 215 | 特定の添数のみエクスポートすることはできません。 |
| 216 | |
| 217 | == 属性のエクスポート == |
| 218 | |
| 219 | 内部セルの属性を複合セルタイプの属性としてエクスポートできます。 |
| 220 | 内部セル内に記述します。 |
| 221 | |
| 222 | == 内部セルの指定子 == |
| 223 | |
| 224 | === allocator 指定子 === |
| 225 | |
| 226 | 内部セルの allocator 指定子は、セル記述の allocator 指定子と同様です。 |
| 227 | この場合のアロケータは、内部セルです。 |
| 228 | |
| 229 | == 使用しない指定子 == |
| 230 | |
| 231 | 以下の指定子は、複合セルタイプでは指定する必要がありません。 |
| 232 | |
| 233 | * omit |
| 234 | * inline |
| 235 | |
| 236 | これらの指定子は、セルタイプの実装において必要になるもので、セルタイプの利用者にとって、必要な情報ではありません。 |
| 237 | |
| 238 | |
| 239 | ------ |
| 240 | [TECS リファレンスマニュアル [wiki: トップページ]]・ |
| 241 | [TECS CDL リファレンスマニュアル [wiki:CDLref トップページ]・[wiki:CDLref_index 目次]] |