Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| language:types2:data [2025/04/21 14:34] – [Data methods] rajit | language:types2:data [2025/05/26 19:46] (current) – [Parameter structures] rajit | ||
|---|---|---|---|
| Line 5: | Line 5: | ||
| * // | * // | ||
| * //parameter structures//, | * //parameter structures//, | ||
| + | |||
| + | In addition, data types can also be // | ||
| ===== Data types ===== | ===== Data types ===== | ||
| Line 60: | Line 62: | ||
| ==== Special data methods ==== | ==== Special data methods ==== | ||
| - | There are two methods that can be specified for a data type: | + | There are two special |
| - a //set method//, used to write a value to the type; | - a //set method//, used to write a value to the type; | ||
| - a //get method//, used to read the value of the type. | - a //get method//, used to read the value of the type. | ||
| Line 127: | Line 129: | ||
| to what is normally viewed as a record/ | to what is normally viewed as a record/ | ||
| + | Pure structures can be used with special function methods, providing a degree of object-oriented | ||
| + | programming capability within ACT. | ||
| + | |||
| + | The following is an example of a pure structure: | ||
| + | <code act> | ||
| + | deftype purestruct (int< | ||
| + | </ | ||
| + | |||
| + | Pure structures can be converted to and from an '' | ||
| + | |||
| + | <code act> | ||
| + | purestruct p; | ||
| + | int< | ||
| + | ... | ||
| + | chp { | ||
| + | ... | ||
| + | x := int(p); | ||
| + | ... | ||
| + | p := purestruct(x); | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | In the example above, the ' | ||
| + | <code act> | ||
| + | ... | ||
| + | x := {p.a, p.b, p.q}; | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | Similarly, the '' | ||
| + | ===== Parameter structures ===== | ||
| + | |||
| + | It can be convenient to group a collection of parameters for readability/ | ||
| + | <code act> | ||
| + | | ||
| + | </ | ||
| + | |||
| + | This defines '' | ||
| + | <code act> | ||
| + | template <myps p> defproc myprocess (bool x[10]) | ||
| + | { | ||
| + | // use p.a, p.b etc. | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Parameter structures can be initialized element-by-element in the usual way, or by using a built-in constructor for them: | ||
| + | <code act> | ||
| + | myps p; | ||
| + | p.a = 5; // element initialization | ||
| + | |||
| + | myps q; | ||
| + | |||
| + | q = myps (4, 8, false); | ||
| + | </ | ||
| + | |||
| + | ===== Enumerations ===== | ||
| + | |||
| + | A user-defined enumeration can be specified as follows: | ||
| + | |||
| + | <code act> | ||
| + | defenum myenum { | ||
| + | ADD, SUB, MULT | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | This defines an enumeration called '' | ||
| + | |||
| + | The enumeration constants can be accessed using the enumeration type name as follows: | ||
| + | |||
| + | <code act> | ||
| + | ... | ||
| + | myenum x; | ||
| + | ... | ||
| + | chp { | ||
| + | ... | ||
| + | x := myenum.SUB; | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Trying to set an enumeration to an integer will result in a type error: | ||
| + | |||
| + | <code act> | ||
| + | chp { | ||
| + | ... | ||
| + | x := 1; | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | will lead to: | ||
| + | |||
| + | < | ||
| + | -[ERROR]-> | ||
| + | stmt: x := 1 | ||
| + | Enumeration/ | ||
| + | </ | ||
| + | |||
| + | However, sometimes a user may want to use user-defined enumerations as integers. In order to do so, | ||
| + | the enumeration can be declared to be a valid integer as follows: | ||
| + | |||
| + | <code act> | ||
| + | defenum myenum : int { | ||
| + | ADD, SUB, MULT | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | This version will permit integer assignments. Note that it is up to the user to ensure that integer assignments are within range. The ACT simulator '' | ||