Recording and Mapping State Changes

This topic discusses how to set constraints against each State in the State Machine under a Class, to define the change in state to be recorded.




See also


The State Properties dialog shown below is for the State called Parliament; the Constraints tab is open to show how the State is linked to the Class CXTrain.

A State can be defined by a single constraint or by many; in the example below the State Parliament has two constraints:


The values of constraints can only be compared for elemental, enum and string types

The CXTrain Class has a member called Location of type int, and a member called Departing.Name of type CString; what this constraint means is that this State is evaluated to true when:

an instance of the CXTrain Class exists and
its member variable Location has the value 0 and
the member variable Departing.Name has the value Parliament


Reporting a State Machine

Operators in Constraints

There are two types of operators you can use on constraints to define a State:

Logical operators AND and OR can be used to combine constraints
Equivalence operators {= and !=} can be used to define the conditions of a constraint


All the constraints for a State are subject to an AND operation unless otherwise specified; you can use the OR operation on them instead, so you could rewrite the constraints in the above example as:

Location=0 OR

Location=1 AND


Below are some examples of using the equivalence operators:

Departing.Name!=Central AND





Quotes around strings are optional; the comparison for strings is always case-sensitive in determining the truth of a constraint

Learn more