Draft documentation, not yet included in the product
The Art Language - State Machine - Transition - Frequent Transition
Frequent Transition
Sometimes you may have a state where one or a few outgoing transitions can be expected to execute much more frequently than others. You can then set a frequent
property on the transition trigger that you expect will trigger the transition frequently. The Art compiler uses this information to optimize generated C++ code so that such transition triggers are evaluated before other triggers that are expected to trigger the transition less frequently.
interrupted: Working -> Stopped on [[rt::properties(
frequent=true
)]] external.interrupt
`
// Interrupted while working...
`;
Note
The frequent property relies on optimization features in the C++ compiler that may or may not be available depending on which target compiler that is used. Only use frequent transitions if profiling has shown that you have a need to do this optimization.
======================================================== The Art Language - Property
frequent
Triggers for which this property is true
will lead to generated code that handles these triggers faster than other triggers. This is done by placing their if-statements early in the rtsBehavior
function to ensure that as little code as possible needs to execute when dispatching a message for a frequent trigger.
| Capsule, Class | generate_file_header | Boolean | true | Capsule, Class | generate_file_impl | Boolean | true | Capsule, Class, Protocol, Port,
| Class, Protocol | version | Integer | 0 | Class | generate_descriptor | Enumeration (true, false, manual) | true | Class | kind | Enumeration (_class, struct, union) | _class | Class | generate_class | Boolean | true | Class | generate_statemachine | Boolean | true | Class | const_target_param_for_decode | Boolean | false | Class | default_constructor_generate | Boolean | true | Class | default_constructor_explicit | Boolean | false | Class | default_constructor_inline | Boolean | false | Class | default_constructor_default | Boolean | false | Class | default_constructor_delete | Boolean | false | Class | default_constructor_visibility |
generate_file_header
By default a capsule or class is translated to one header file (.h
) and one implementation file (.cpp
). Set this property to false
to prevent generation of the header file, for example if you prefer to write it manually.
generate_file_impl
By default a capsule or class is translated to one header file (.h
) and one implementation file (.cpp
). Set this property to false
to prevent generation of the implementation file, for example if you prefer to write it manually.
generate_descriptor
By default a type descriptor will be generated for each class. The TargetRTS uses the type descriptor to know how to initialize, copy, move, destroy, encode or decode an instance of that class. Set this property to false
for classes that don't need a type descriptor. Set it to manual
if the class needs a type descriptor but you want to implement it manually rather than using the implementation that is generated by default. Note that even if you set this property to true
so that a default type descriptor is generated, you can still override individual type descriptor functions for the class.
kind
By default a class is translated to a C++ class. You can use this property to instead translate it to a struct
or union
.
generate_class
If set to false
no C++ code will be generated for the class.
generate_statemachine
If set to false
code generation for the class' state machine will be suppressed. You can use this if the state machine is informal, and you prefer to implement it manually in another way.
const_target_param_for_decode
By default a decode function uses a non-const target
parameter. This is because usually a decode implementation must call non-const functions on the decoded object to populate it with data from the decoding. However, if it doesn't need to call such functions you can set this property so that the target
parameter is declared as const.
default_constructor_generate
If set to false
a default (i.e. parameterless) constructor will not be generated for the class.
default_constructor_explicit
If set to true
the default (i.e. parameterless) constructor will be declared as explicit.
default_constructor_inline
If set to true
the default (i.e. parameterless) constructor will be declared as inline. It's implementation will then be generated into the header file.
default_constructor_default
If set to true
the default (i.e. parameterless) constructor will be declared as defaulted. This tells the compiler to synthesize a default constructor even if one normally would not be synthesized (for example because there is a user-defined constructor with parameters).
default_constructor_delete
If set to true
the default (i.e. parameterless) constructor will be declared as deleted. This will cause the compiler to generate an error if it is invoked. This can be used for preventing objects of the class to be created.
default_constructor_visibility
This property can be used for setting the visibility of the default (i.e. parameterless) constructor. By default it will be public
but you can change it either to protected
or private
.