Skip to content

Commit c6b11d0

Browse files
committed
5.2.3
1 parent 60e2efa commit c6b11d0

File tree

8 files changed

+39
-254
lines changed

8 files changed

+39
-254
lines changed

doxygen/Doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#---------------------------------------------------------------------------
88
DOXYFILE_ENCODING = UTF-8
99
PROJECT_NAME = QM
10-
PROJECT_NUMBER = 5.2.2
10+
PROJECT_NUMBER = 5.2.3
1111
PROJECT_BRIEF = "Model-Based Design Tool"
1212
PROJECT_LOGO = ../../ql-doxygen/images/logo_ql.png
1313
OUTPUT_DIRECTORY =

doxygen/DoxygenLayout.xml

Lines changed: 0 additions & 226 deletions
This file was deleted.

doxygen/history.dox

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
/*! @page history Revision History
22
@nav{ce_qmc,license}
33

4+
@section qm_5_2_3 Version 5.2.3, 2022-11-18
5+
__Code Generation:__
6+
- This release changes the licensing policy with respect to @ref sm_class_qmsm "QMsm-style state machines". Starting with this release, @ref ab_license "commercial license certificate" is no longer required to generate code for @ref sm_class_qmsm "QMsm-style state machines".
7+
8+
__Fixed Bugs:__
9+
10+
- [#318 QM incorrectly generates code for external files](https://sourceforge.net/p/qpc/bugs/318)
11+
12+
413
@section qm_5_2_2 Version 5.2.2, 2022-09-30
514
__Code Generation:__
615
- extended the free operation model item to also support function templates in C++

doxygen/main.dox

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
/*! @mainpage About QM™
22

3-
![QM Model-Based Design tool](qm_3monitors.jpg)
3+
@image html qm_3monitors.jpg
4+
@image latex qm_3monitors.jpg
5+
46

57
@ifnot LATEX
68
@remark
@@ -109,9 +111,6 @@ By default, the QM code generator assumes that the underlying QP™ framewor
109111

110112
However, when the underlying QP framework is licensed commercially, the Licensee receives a @ref ui_license_cert "QM License Certificate file", which can be registered with QM by means of the @ref ui_license-dlg "Code Generation License Dialog Box". After registering a commercial license, QM generates @ref ce_comment-file "top-level file comments" that reflect the commercial license terms.
111113

112-
@attention
113-
Starting from version 4, QM™ requires a @ref ui_license_cert "QM license certificate" to generate the @ref ce_qmsm_strategy "QMsm state machine implementation strategy".
114-
115114

116115
@section ab_help How to get help?
117116
Please post any **technical questions** to the <a class="extern" target="_blank" href="http://sourceforge.net/p/qpc/discussion/668726">Free Support Forum</a> hosted on SourceForge.net. Posts to this forum benefit the whole community and are typically answered the same day.

doxygen/make.bat

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,8 @@ if "%1"=="-CHM" (
7474
@echo Adding custom files...
7575
xcopy img %LATEX_OUT%\img\
7676

77-
@echo TODO...
78-
@echo cd ..\latex
79-
@echo make.bat
77+
@cd %LATEX_OUT%
78+
@call make.bat
8079

8180
) else (
8281

doxygen/sm.dox

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ The section @ref bm_diagram describes generic operations applicable to any diagr
2424
In QM&trade; a State Machine can be associated only with a @ref bm_class "class" that is a direct or indirect subclass of the @ref bm_qp_item "QP Framework" base class **QHsm**, shown at the top of the <a class="extern" target="_blank" href="http://en.wikipedia.org/wiki/Class_(computer_programming)">class diagram</a> @ref sm_super "below".
2525

2626
@anchor sm_super
27-
@image html "qp_sm.gif" "State Machine Classes in QP 5.8+"
27+
@image html qp_sm.gif
28+
@image latex qp_sm.gif
29+
@caption{State Machine Classes in QP 5.8+}
2830

2931
The <span style="background-color:#aaf;"> **QHsm** </span> base class provides the basic interface `init()` and `dispatch()` for initializing a state machine and for dispatching events to it, respectively. The specific implementations of the state machine interface in the `QHsm` base class and its subclasses, such as **QActive**, **QMsm**, and **QMActive**, determine the @ref ce_sm "state machine implementation strategy" that QM&trade; will apply to generate code.
3032

@@ -37,42 +39,44 @@ The <span style="background-color:#AAF;"> **QHsm** and **QActive** </span> class
3739

3840
The screen shot below shows how to select the **superclass** property of your state-machine/active-object class in the @ref bm_class_prop, so that it uses the `QHsm/QActive`-Style state machine implementation strategy:
3941

40-
@image html sm_qhsm-style.png "Selecting QHsm/QActive-Style Superclass"
42+
@image html sm_qhsm-style.png
43+
@image latex sm_qhsm-style.png
44+
@caption{Selecting QHsm/QActive-Style Superclass}
4145

42-
The QHsm-style state machine code is highly readable and human-maintainable, but it requires discovering the *transition-sequences* (sequences of exit/entry/initial actions) at run-time as opposed to code-generation time.
46+
The main advantage of QHsm-style state machine implementation is that the code is **highly readable** and human-maintainable, but it requires discovering the *transition-sequences* (sequences of exit/entry/initial actions) at run-time as opposed to code-generation time. Also, the state nesting in QHsm-style state machines is limited to 5 levels of nesting.
4347

4448
@attention
4549
Apart from changing the superclass property in the class Property Sheet, you also need to call the right superclass' **constructor** in the constructor of your state machine class. For direct subclasses of <span style="background-color:#AAF;"> **QActive** </span>, you need to call `QActive_ctor()` (for the QP/C and QP-nano frameworks) and `QActive::QActive()` (for the QP/C++ framework).
4650

47-
@image html sm_qhsm-ctor.png "Calling the QActive_ctor() in the subclass' constructor"
51+
@image html sm_qhsm-ctor.png
52+
@image latex sm_qhsm-ctor.png
53+
@caption{Calling the QActive_ctor() in the subclass' constructor}
4854

49-
@note
50-
You should consider `QHsm/QActive`-style state machines only when you are still interested in **manual coding** or maintaining your state machines. (But then you will be working against the strictly @ref ab_special "forward-engineering nature" of QM&trade;)
55+
@remark
56+
You should consider `QHsm/QActive`-style state machines when you are still interested in **manual coding** or maintaining your state machines. (But then you will be working against the strictly @ref ab_special "forward-engineering nature" of QM&trade;)
5157

5258

5359
@subsection sm_class_qmsm QMsm/QMActive-Style State Machines
54-
The <span style="background-color:#FAA;"> **QMsm** and **QMActive** </span> classes from the @ref sm_class "class diagram above" re-implement the state machine interface and thus provide an alternative @ref ce_qmsm_strategy that is more efficient than the @ref sm_class_qhsm "QHsm-style strategy", but requires the assistance of the QM&trade; tool (as an advanced "state machine compiler") to generate the complete *transition-sequences* at *code-generation* time. The resulting code is still **highly human-readable**, but is **not** suitable for manual coding or maintaining.
55-
56-
@note
57-
The QMsm/QMActive base classes are __not__ provided in the QP-nano framework, and consequently the `QMsm/QMActive` state machine implementation strategy is __not__ available in QP-nano.
60+
The <span style="background-color:#FAA;"> **QMsm** and **QMActive** </span> classes from the @ref sm_class "class diagram above" re-implement the state machine interface and thus provide an alternative @ref ce_qmsm_strategy that is more efficient than the @ref sm_class_qhsm "QHsm-style strategy", but requires the assistance of the QM&trade; tool (as an advanced "state machine compiler") to generate the complete *transition-sequences* at *code-generation* time. The resulting code is still **human-readable**, but is **not** suitable for manual coding or maintaining.
5861

5962

6063
The screen shot below shows how to select the **superclass** property of your state-machine/active-object class in the @ref bm_class_prop, so that it uses the QMsm/QMActive-Style state machine implementation strategy:
6164

62-
@image html sm_qmsm-style.png "Selecting QMsm/QMActive-Style Superclass"
65+
@image html sm_qmsm-style.png
66+
@image latex sm_qmsm-style.png
67+
@caption{Selecting QMsm/QMActive-Style Superclass}
6368

64-
The lab tests indicate that the `QMsm/QMActive`-style state machines can be about twice as fast as the `QHsm`-style state machines (see the @ref sm_class_qhsm "next section" below). Additionally, the `QMsm/QMActive`-style state machines require less runtime support (smaller event processor) and use about 70% less stack space for the `dispatch()` operation than `QHsm/QActive`-style state machines.
69+
The lab tests indicate that the `QMsm/QMActive`-style state machines can be about twice as fast as the `QHsm`-style state machines (see the @ref sm_class_qhsm "next section" below). Additionally, the `QMsm/QMActive`-style state machines require less runtime support (smaller event processor) and use about 70% less stack space for the `dispatch()` operation than `QHsm/QActive`-style state machines. Also, the state nesting in QMsm-style state machines is no longer limited (nesting levels as high as 10 levels have been tested).
6570

6671
@attention
6772
Apart from changing the superclass property in the class Property Sheet, you also need to call the right superclass' **constructor** in the constructor of your state machine class. For direct subclasses of <span style="background-color:#FAA;"> **QMActive** </span>, you need to call `QMActive_ctor()` (for the QP/C framework) and `QMActive::QMActive()` (for the QP/C++ framework).
6873

69-
@image html sm_qmsm-ctor.png "Calling the QMActive_ctor() in the subclass' constructor"
74+
@image html sm_qmsm-ctor.png
75+
@image latex sm_qmsm-ctor.png
76+
@caption{Calling the QMActive_ctor() in the subclass' constructor}
7077

71-
@note
72-
The `QMsm/QMActive`-style state machines are generally recommended over the older `QHsm/QActive`-style state machines described @ref sm_class_qhsm "above". You should consider `QHsm/QActive`-style state machines only when you are still interested in **manual** coding or maintaining your state machines. (But then you will be working against the strictly @ref ab_special "forward-engineering nature" of QM&trade;)
73-
74-
@attention
75-
The `QMsm/QMActive`-style implementation strategy requires a @ref ab_license "commercial license certificate" to generate code.
78+
@remark
79+
The `QMsm/QMActive`-style state machines are generally recommended over the older `QHsm/QActive`-style state machines described @ref sm_class_qhsm "above".
7680

7781

7882
@section sm_toolbox State Machine Toolbox

version-5.2.2

Lines changed: 0 additions & 2 deletions
This file was deleted.

version-5.2.3

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
QM 5.2.3
2+
2022-11-18

0 commit comments

Comments
 (0)