Previous: , Up: Structures   [Contents][Index]


6.23.6 Forth200x Structures

Forth 2012 標準では、 やや不便な形式の構造体が定義されています。 一般に field+ を使用する場合は、 自分でアライメントを行う必要がありますが、 アライメント機能を含む便利なワード(例: field:)が多数あります。

典型的な使用例は以下のとおりです:

0
  field:                   s-a
  faligned 2 floats +field s-b
constant s-struct

この構造体を記述する別の方法は以下のとおりです:

begin-structure s-struct
  field:                   s-a
  faligned 2 floats +field s-b
end-structure

以下のように、 同一のフィールドと追加のフィールドを持つ構造体を定義できます:

s-struct
  cfield: t-c
  cfield: t-d
constant t-struct

あるいは、

s-struct extend-structure t-struct
  cfield: t-c
  cfield: t-d
end-structure
begin-structure ( "name" – struct-sys 0  ) facility-ext “begin-structure”
extend-structure ( n "name" – struct-sys n  ) gforth-1.0 “extend-structure”

サイズ n の既存の構造体の拡張として、 新しい構造体 name を開始します。

end-structure ( struct-sys +n –  ) facility-ext “end-structure”

begin-struction で開始された構造体を終了します

+field ( noffset1 nsize "name" – noffset2  ) facility-ext “plus-field”

定義ワード。 name ( addr1 -- addr2 ) を定義します。 ここで、 addr2addr1+noffset1 です。 noffset2noffset1+nsize です。

cfield: ( u1 "name" – u2  ) facility-ext “c-field-colon”

文字サイズのフィールドを定義します

field: ( u1 "name" – u2  ) facility-ext “field-colon”

アライメントされたセル・サイズのフィールドを定義します

2field: ( u1 "name" – u2  ) gforth-0.7 “two-field-colon”

アライメントされた2倍長セル・サイズのフィールドを定義します

ffield: ( u1 "name" – u2  ) floating-ext “f-field-colon”

アライメントされた浮動小数点サイズのフィールドを定義します

sffield: ( u1 "name" – u2  ) floating-ext “s-f-field-colon”

sfaligned された sfloat サイズのフィールドを定義します

dffield: ( u1 "name" – u2  ) floating-ext “d-f-field-colon”

dfaligned された dfloat サイズのフィールドを定義します

wfield: ( u1 "name" – u2  ) gforth-1.0 “w-field-colon”

16 ビット値のアライメントされたフィールドを定義します。

lfield: ( u1 "name" – u2  ) gforth-1.0 “l-field-colon”

32ビット値にアライメントされたフィールドを定義します。

xfield: ( u1 "name" – u2  ) gforth-1.0 “x-field-colon”

64ビット値にアライメントされたフィールドを定義します。


Previous: Structure Glossary, Up: Structures   [Contents][Index]