Studio:Scl values

From STRIDE Wiki
Jump to navigation Jump to search

The scl_values pragma

The scl_values pragma allows a data item to be constrained to a particular set of values.

Syntax

#pragma scl_values(global-type-specifier, values-type)

#pragma scl_values(container-specifier, field-specifier, values-type)

#pragma scl_values(container-specifier, field-specifier, values-value-1, values-value-2..n)

#pragma scl_values(global-type-specifier, values-value-1, values-value-2..n)
Parameters Type Description
global-specifier String Name of the global type to be constrained.
values-type String Name of the type that enumerates the range of values to which the data item is constrained.
container-specifier String Partial identification of the field to be constrained. The container_specifier in combination with the field_specifier completely identify the field to be constrained.
field-specifier String Together with the container specifier, completes the identity of the field whose values are to be constrained.
values-value-1 Constant expression First constant expression to which the data item's value will be constrained.
values-value-2..n [Optional] Constant expression list Optional second and subsequent constant expressions, adding to the set of values to which the data item's value will be constrained. These expressions must be comma separated.

Notes

  • The scl_values pragma may only be applied to items that are of integral type (e.g., signed/unsigned char, short, int, and long), and pointers that have had scl_ptr_opaque applied to them.
  • Each value in the values list is assigned both a symbolic name and an integral value. The symbolic name is:
    • The macro name if the value is defined by a macro (the macro name must be a non-parameterized macro).
    • The enumerated constant name if the value is an enumeration constant.
    • If the constant is not a simple macro name or enumerated constant name (i.e., it is some kind of expression) then the name is the constant expressed as a decimal number, including its sign if the value is negative.
  • Two values in the number-list may not have the same symbolic name.
  • scl_values() does not change the underlying type of the instances to which it is applied. If those instances are referenced by other pragmas, the type is unaffected; however, the instances will have constrained values.

Examples

Example 1: Integer field constrained to enumeration values

typedef enum {
  RED,
  GREEN,
  BLUE
} COLOR;
 
int f(int x);
#pragma scl_function(f)
#pragma scl_values(f.x, COLOR)

Example 2: Integer field constrained to a specific set of integer values

#define FIRST  23
#define SECOND 44
#define THIRD  50
#define FOURTH -5
 
int f(int x);
#pragma scl_function(f)
#pragma scl_values(f.x, FIRST, SECOND, THIRD, FOURTH)

See Also

  • For additional information on the scl_values pragma, including constraints, refer to the section on scl_values in the SCL Reference Guide.