/****************************************************************************
**
** 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.

 */
