| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| /*! |
| \example statemachine/factorial |
| \title Factorial States Example |
| |
| \brief The Factorial States example shows how to use \l{The State Machine |
| Framework} to calculate the factorial of an integer. |
| |
| The statechart for calculating the factorial looks as follows: |
| |
| \image factorial-example.png |
| \omit |
| \caption This is a caption |
| \endomit |
| |
| In other words, the state machine calculates the factorial of 6 and prints |
| the result. |
| |
| \snippet statemachine/factorial/main.cpp 0 |
| |
| The Factorial class is used to hold the data of the computation, \c x and |
| \c fac. It also provides a signal that's emitted whenever the value of \c |
| x changes. |
| |
| \snippet statemachine/factorial/main.cpp 1 |
| |
| The FactorialLoopTransition class implements the guard (\c x > 1) and |
| calculations (\c fac = \c x * \c fac; \c x = \c x - 1) of the factorial |
| loop. |
| |
| \snippet statemachine/factorial/main.cpp 2 |
| |
| The FactorialDoneTransition class implements the guard (\c x <= 1) that |
| terminates the factorial computation. It also prints the final result to |
| standard output. |
| |
| \snippet statemachine/factorial/main.cpp 3 |
| |
| The application's main() function first creates the application object, a |
| Factorial object and a state machine. |
| |
| \snippet statemachine/factorial/main.cpp 4 |
| |
| The \c compute state is created, and the initial values of \c x and \c fac |
| are defined. A FactorialLoopTransition object is created and added to the |
| state. |
| |
| \snippet statemachine/factorial/main.cpp 5 |
| |
| A final state, \c done, is created, and a FactorialDoneTransition object |
| is created with \c done as its target state. The transition is then added |
| to the \c compute state. |
| |
| \snippet statemachine/factorial/main.cpp 6 |
| |
| The machine's initial state is set to be the \c compute state. We connect |
| the QStateMachine::finished() signal to the QCoreApplication::quit() slot, |
| so the application will quit when the state machine's work is |
| done. Finally, the state machine is started, and the application's event |
| loop is entered. |
| |
| */ |