Skip to content

Commit fcb2e1f

Browse files
author
Sonia Mathew
committed
Generated HTML for Release 3.4.0
1 parent da791d1 commit fcb2e1f

25 files changed

Lines changed: 324 additions & 118 deletions

‎docs/art-lang/cpp-extensions/index.html‎

Lines changed: 74 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,40 @@
505505
C++ Implementation
506506
</a>
507507

508+
<nav class="md-nav" aria-label="C++ Implementation">
509+
<ul class="md-nav__list">
510+
511+
<li class="md-nav__item">
512+
<a href="#1-type-descriptor-object" class="md-nav__link">
513+
1) Type descriptor object
514+
</a>
515+
516+
</li>
517+
518+
<li class="md-nav__item">
519+
<a href="#2-type-descriptor-functions" class="md-nav__link">
520+
2) Type descriptor functions
521+
</a>
522+
523+
</li>
524+
525+
<li class="md-nav__item">
526+
<a href="#3-type-installer-object" class="md-nav__link">
527+
3) Type installer object
528+
</a>
529+
530+
</li>
531+
532+
<li class="md-nav__item">
533+
<a href="#4-typed-value-struct" class="md-nav__link">
534+
4) "Typed value" struct
535+
</a>
536+
537+
</li>
538+
539+
</ul>
540+
</nav>
541+
508542
</li>
509543

510544
<li class="md-nav__item">
@@ -1497,6 +1531,40 @@
14971531
C++ Implementation
14981532
</a>
14991533

1534+
<nav class="md-nav" aria-label="C++ Implementation">
1535+
<ul class="md-nav__list">
1536+
1537+
<li class="md-nav__item">
1538+
<a href="#1-type-descriptor-object" class="md-nav__link">
1539+
1) Type descriptor object
1540+
</a>
1541+
1542+
</li>
1543+
1544+
<li class="md-nav__item">
1545+
<a href="#2-type-descriptor-functions" class="md-nav__link">
1546+
2) Type descriptor functions
1547+
</a>
1548+
1549+
</li>
1550+
1551+
<li class="md-nav__item">
1552+
<a href="#3-type-installer-object" class="md-nav__link">
1553+
3) Type installer object
1554+
</a>
1555+
1556+
</li>
1557+
1558+
<li class="md-nav__item">
1559+
<a href="#4-typed-value-struct" class="md-nav__link">
1560+
4) "Typed value" struct
1561+
</a>
1562+
1563+
</li>
1564+
1565+
</ul>
1566+
</nav>
1567+
15001568
</li>
15011569

15021570
<li class="md-nav__item">
@@ -1610,7 +1678,7 @@ <h2 id="type-descriptor">Type Descriptor</h2>
16101678
</div>
16111679
<h3 id="c-implementation">C++ Implementation</h3>
16121680
<p>The C++ implementation of a type descriptor consists of four parts. In the code shown below we assume the type descriptor describes a type called "MyType".</p>
1613-
<p><strong>1) A type descriptor object</strong></p>
1681+
<h4 id="1-type-descriptor-object">1) Type descriptor object</h4>
16141682
<p>This is a variable typed by <a href="../../targetrts-api/struct_r_t_object__class.html">RTObject_class</a> with a name that has the prefix "RTType_". It will be declared in the header file:</p>
16151683
<pre><code class="language-cpp">extern const RTObject_class RTType_MyType;
16161684
</code></pre>
@@ -1621,7 +1689,7 @@ <h3 id="c-implementation">C++ Implementation</h3>
16211689
};
16221690
</code></pre>
16231691
<p>Member variables of <a href="../../targetrts-api/struct_r_t_object__class.html">RTObject_class</a> store all information about the type, such as its name and byte size. Some of the member variables store pointers to type descriptor functions which the TargetRTS will call when it needs to do something with an instance of the type, for example copy or encode it.</p>
1624-
<p><strong>2) Type descriptor functions</strong></p>
1692+
<h4 id="2-type-descriptor-functions">2) Type descriptor functions</h4>
16251693
<p>These are functions with a certain prototype, each of which performs a specific action on an instance of the type. The type descriptor object stores pointers to these functions. For a partial type descriptor, some of these pointers will be <code>nullptr</code> and then the corresponding type descriptor function does not exist. Below is the list of type descriptor functions that can be part of a type descriptor:</p>
16261694
<p id="art_type_descriptor_functions"/>
16271695

@@ -1667,13 +1735,13 @@ <h3 id="c-implementation">C++ Implementation</h3>
16671735
</tbody>
16681736
</table>
16691737
<p>The encode function usually encodes the instance into a string representation, and the decode function usually parses the same string representation and creates an instance of the type from it. However, the functions use interface classes <a href="../../targetrts-api/class_r_t_encoding.html"><code>RTEncoding</code></a> and <a href="../../targetrts-api/class_r_t_decoding.html"><code>RTDecoding</code></a> from the TargetRTS which can be implemented in many different ways. Note also that you can globally disable the support for encoding and/or decoding by unsetting the macros <a href="../../target-rts/build/#object_decode-and-object_encode"><code>OBJECT_DECODE</code> and <code>OBJECT_ENCODE</code></a> respectively. Learn more about encoding and decoding <a href="../../target-rts/encoding-decoding/">in this chapter</a>.</p>
1670-
<p><strong>3) A type installer object</strong></p>
1738+
<h4 id="3-type-installer-object">3) Type installer object</h4>
16711739
<p>Decoding functions typically need to look up a type descriptor from the name of the type. For example, if it finds the type name "MyType" in the string that it parses, it needs to find the type descriptor object for "MyType" so it can allocate memory for an instance of "MyType" and then initialize it. To facilitate this lookup the TargetRTS keeps a type descriptor registry. The purpose of the type installer object is to add the type descriptor to this registry. The C++ code looks like this:</p>
16721740
<pre><code class="language-cpp">#if OBJECT_DECODE
16731741
RTTypeInstaller rtg_MyType_installer( RTType_MyType );
16741742
#endif
16751743
</code></pre>
1676-
<p><strong>4) A "typed value" struct</strong></p>
1744+
<h4 id="4-typed-value-struct">4) "Typed value" struct</h4>
16771745
<p>This is a struct which encapsulates an untyped instance of the type and its type descriptor. Its name has the prefix "RTTypedValue_". The struct has constructors that enable construction from a reference to an instance of the type. The typed value struct is the glue between generated code and TargetRTS code. TargetRTS functions get an untyped instance together with the type descriptor, and the type descriptor provides all information it needs to know about the type.</p>
16781746
<p>The typed value struct will be declared and implemented in the header file:</p>
16791747
<pre><code class="language-cpp">struct RTTypedValue_MyType
@@ -1708,6 +1776,7 @@ <h3 id="c-implementation">C++ Implementation</h3>
17081776
}
17091777
};
17101778
</code></pre>
1779+
<p>If the type is nested within another type the typed value struct gets a name where scope qualifiers (<code>::</code>) have been replaced with underscores (<code>_</code>). For example, a nested type <code>OuterType::InnerType</code> gets a typed value struct with the name <code>RTTypedValue_OuterType_InnerType</code>.</p>
17111780
<h3 id="automatically-generated">Automatically Generated</h3>
17121781
<p>The code generator will automatically generate a type descriptor for a C++ type if you mark it with the <code>rt::auto_descriptor</code> attribute. The generated type descriptor functions will get a default implementation that depends on the kind of type. If the default implementation is not appropriate for your type you can simply provide your own implementation of one or many type descriptor functions in an <code>rt::impl</code> code snippet. </p>
17131782
<div class="admonition note">
@@ -1819,6 +1888,7 @@ <h3 id="automatically-generated">Automatically Generated</h3>
18191888
<li><a href="https://github.com/secure-dev-ops/code-realtime/tree/main/art-comp-test/tests/struct_type_descriptor_header_file">Automatically generated type descriptor for a struct defined in a C++ header file</a></li>
18201889
<li><a href="https://github.com/secure-dev-ops/code-realtime/tree/main/art-comp-test/tests/enum_type_descriptor_header_file">Automatically generated type descriptor for an enum defined in a C++ header file</a></li>
18211890
<li><a href="https://github.com/secure-dev-ops/code-realtime/tree/main/art-comp-test/tests/typedef_type_descriptor_header_file">Automatically generated type descriptor for a typedef and type alias defined in a C++ header file (with customized type descriptors)</a></li>
1891+
<li><a href="https://github.com/secure-dev-ops/code-realtime/tree/main/art-comp-test/tests/nested_type_descriptor">Automatically generated type descriptor for nested types</a></li>
18221892
</ul>
18231893
</div>
18241894
<h3 id="manually-implemented">Manually Implemented</h3>

‎docs/art-lang/index.html‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2296,7 +2296,8 @@ <h2 id="protocol-and-event">Protocol and Event</h2>
22962296
<p class="admonition-title">Note</p>
22972297
<p>An event can have at most one parameter. If you need to send multiple data objects with an event you can declare an event parameter of struct or class type.</p>
22982298
</div>
2299-
<p>The C++ type of an event parameter must be specified either as a primitive type or as an unqualified name of a user-defined type. If a user-defined type is used, it must usually have a <a href="cpp-extensions/#type-descriptor">type descriptor</a> so the TargetRTS can copy or move the data at run-time when the event is sent. However, in some special cases a type descriptor is not required, for example if the user-defined type is a typedef or type alias of a primitive type. In those cases you must use the <code>[[rt::no_descriptor]]</code> attribute to specify that you want to pass the event parameter without using a type descriptor. See the validation rule <a href="../validation/#cpp_4000_eventtypewithouttypedescriptor">CPP_4000_eventTypeWithoutTypeDescriptor</a> for examples and more information.</p>
2299+
<p>The C++ type of an event parameter can be any primitive or user-defined type. Types may be specified with qualified names if necessary (e.g. <code>A::B</code>), but cannot have type modifiers (e.g. <code>Type*</code>) or template parameters (e.g. <code>T&lt;A&gt;</code>). If required you can create a typedef or type alias of the type you want to use, and then use the name of that typedef or type alias as the event parameter type. </p>
2300+
<p>If a user-defined type is used, it must usually have a <a href="cpp-extensions/#type-descriptor">type descriptor</a> so the TargetRTS can copy or move the data at run-time when the event is sent. However, in some special cases a type descriptor is not required, for example if the user-defined type is a typedef or type alias of a primitive type. In those cases you must use the <code>[[rt::no_descriptor]]</code> attribute to specify that you want to pass the event parameter without using a type descriptor. See the validation rule <a href="../validation/#cpp_4000_eventtypewithouttypedescriptor">CPP_4000_eventTypeWithoutTypeDescriptor</a> for examples and more information.</p>
23002301
<p>The following code snippets can be used for a protocol:</p>
23012302
<p id="protocol_code_snippets"/>
23022303
<table>

‎docs/releases/CHANGELOG/index.html‎

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121

2222

23-
<title>3.3.0 (2026-03-26 09:46) - DevOps Code RealTime</title>
23+
<title>3.4.0 (2026-05-11 08:44) - DevOps Code RealTime</title>
2424

2525

2626

@@ -88,7 +88,7 @@
8888
<div data-md-component="skip">
8989

9090

91-
<a href="#330-2026-03-26-0946" class="md-skip">
91+
<a href="#340-2026-05-11-0844" class="md-skip">
9292
Skip to content
9393
</a>
9494

@@ -120,7 +120,7 @@
120120
<div class="md-header__topic" data-md-component="header-topic">
121121
<span class="md-ellipsis">
122122

123-
3.3.0 (2026-03-26 09:46)
123+
3.4.0 (2026-05-11 08:44)
124124

125125
</span>
126126
</div>
@@ -1361,6 +1361,26 @@
13611361

13621362

13631363

1364+
<h1 id="340-2026-05-11-0844">3.4.0 (2026-05-11 08:44)</h1>
1365+
<ol>
1366+
<li>The Properties view now shows the name of a selected symbol or line in its header. It also has a new button in the header for moving the selection upwards in the hierarchy of nested symbols. Clicking the button while holding down the Shift key moves the selection to the diagram itself (i.e. has the same effect as clicking in the diagram background). The new button helps for example when working in big and deeply nested state diagrams, where enclosing symbols or the diagram background often are not visible. It also makes it easier to understand which internal transitions that may trigger when a nested state is active.</li>
1367+
</ol>
1368+
<p><img alt="" src="https://secure-dev-ops.github.io/code-realtime/working-with-art/images/move-selection-upwards.png" /></p>
1369+
<ol start="2">
1370+
<li>It's now possible to resize choice symbols in state diagrams, when manual diagram layout is used. This can for example be useful if there are many outgoing transitions from the choice.</li>
1371+
<li>The Z-order of symbols has been adjusted to ensure that symbols that are covered by an expanded symbol are drawn behind it. Previously such covered symbols could appear on top of the expanded symbol which made them look like nested symbols.</li>
1372+
<li>The sizes of some non-resizable symbols in state diagrams have been adjusted to be the same as those in Model RealTime. This avoids unnecessary differences in diagram layout when exporting models from Model RealTime to Code RealTime.</li>
1373+
<li>Traces shown in a sequence diagram can now be filtered using regular expressions (both for instances and messages). The sequence diagram viewer also has an improved scroll behavior to make it possible to open very large trace files. Trace messages are split into pages where only the currently viewed page is shown in the trace viewer.</li>
1374+
</ol>
1375+
<p><img alt="" src="https://secure-dev-ops.github.io/code-realtime/running-and-debugging/images/trace-filter.png" /></p>
1376+
<ol start="6">
1377+
<li>When the validation rule <a href="https://secure-dev-ops.github.io/code-realtime/validation/#art_0036_unexpectedtriggers">ART_0036</a> finds a transition which has unexpected triggers because it originates from an entry or exit point with incoming transitions, it now reports those incoming transitions as related elements. This makes it easier to understand which of the incoming transitions that cause the triggers to be unexpected and to navigate to them.</li>
1378+
<li>Environment variables in TC include paths are now supported and correctly expanded in the JSON files that are generated for C++ language servers. Also, these JSON files now specify the actual compiler that will be used when compiling the code, which enables the C++ language servers to give a better experience when viewing and editing C++ code.</li>
1379+
<li>Errors in a TC or in its prerequisites, for example syntax errors, are now better reported when building the TC.</li>
1380+
<li>The C++ code generator now supports generation of type descriptors for nested types.</li>
1381+
<li>Include paths with spaces are now correctly generated into the Makefile. An include path string is enclosed in double quotes if it contains spaces or references an environment variable (which potentially can be defined with spaces).</li>
1382+
<li>Version 2.4.0 of the Art Exporter is now available. In the new version it's now possible to customize the severity of problems reported during export, and to turn off reporting of problems that have already been analyzed. Many other improvements are included as well; see <a href="https://model-realtime.hcldoc.com/help/topic/com.ibm.xtools.rsarte.webdoc/Utilities/Art%20Exporter.html">this page</a> for more detailed release notes.</li>
1383+
</ol>
13641384
<h1 id="330-2026-03-26-0946">3.3.0 (2026-03-26 09:46)</h1>
13651385
<ol>
13661386
<li>Manual layout of lines is now also supported for class diagrams. </li>
14.7 KB
Loading

0 commit comments

Comments
 (0)