BDE 4.14.0 Production release
Loading...
Searching...
No Matches
s_baltst.h
Go to the documentation of this file.
1/// @file s_baltst.h
2///
3///
4/// @defgroup s_baltst Package s_baltst
5/// @brief
6/// @addtogroup Standalones
7/// @{
8/// @addtogroup s_baltst
9/// [s_baltst]: group__s__baltst.html
10/// @{
11///
12/// # Purpose {#s_baltst-purpose}
13/// Private auto-generated classes for testing of other packages.
14///
15/// @see balber, baljsn, balxml
16///
17/// # Description {#s_baltst-description}
18/// The 's_baltst' package provides a number of classes for testing
19/// encoders and decoders in other packages.
20///
21/// ## Component Synopsis
22///
23/// @ref s_baltst_address :
24/// Provide value-semantic attribute classes
25///
26/// @ref s_baltst_basicrecord :
27/// Provide value-semantic attribute classes
28///
29/// @ref s_baltst_basicschema :
30/// Provide value-semantic attribute classes
31///
32/// @ref s_baltst_basicschemautil :
33/// Provide utilities for 's_baltst::BasicSchema' objects.
34///
35/// @ref s_baltst_bigrecord :
36/// Provide value-semantic attribute classes
37///
38/// @ref s_baltst_customint :
39/// Provide value-semantic attribute classes
40///
41/// @ref s_baltst_customizedstring :
42/// Provide value-semantic attribute classes
43///
44/// @ref s_baltst_customstring :
45/// Provide value-semantic attribute classes
46///
47/// @ref s_baltst_employee :
48/// Provide value-semantic attribute classes
49///
50/// @ref s_baltst_enumerated :
51/// Provide value-semantic attribute classes
52///
53/// @ref s_baltst_featuretestmessage :
54/// Provide value-semantic attribute classes
55///
56/// @ref s_baltst_featuretestmessageutil :
57/// Provide utilities for testing codecs with feature-test messages.
58///
59/// @ref s_baltst_mychoice :
60/// Provide value-semantic attribute classes
61///
62/// @ref s_baltst_myenumeration :
63/// Provide value-semantic attribute classes
64///
65/// @ref s_baltst_mysequence :
66/// Provide value-semantic attribute classes
67///
68/// @ref s_baltst_mysequencewithanonymouschoice :
69/// Provide value-semantic attribute classes
70///
71/// @ref s_baltst_mysequencewitharray :
72/// Provide value-semantic attribute classes
73///
74/// @ref s_baltst_mysequencewithattributes :
75/// Provide value-semantic attribute classes
76///
77/// @ref s_baltst_mysequencewithchoice :
78/// Provide value-semantic attribute classes
79///
80/// @ref s_baltst_mysequencewithdecimalattribute :
81/// Provide value-semantic attribute classes
82///
83/// @ref s_baltst_mysequencewithdoubleattribute :
84/// Provide value-semantic attribute classes
85///
86/// @ref s_baltst_mysequencewithnillable :
87/// Provide value-semantic attribute classes
88///
89/// @ref s_baltst_mysequencewithnillables :
90/// Provide value-semantic attribute classes
91///
92/// @ref s_baltst_mysequencewithnullable :
93/// Provide value-semantic attribute classes
94///
95/// @ref s_baltst_mysequencewithnullables :
96/// Provide value-semantic attribute classes
97///
98/// @ref s_baltst_mysequencewithprecisiondecimalattribute :
99/// Provide value-semantic attribute classes
100///
101/// @ref s_baltst_mysimplecontent :
102/// Provide value-semantic attribute classes
103///
104/// @ref s_baltst_mysimpleintcontent :
105/// Provide value-semantic attribute classes
106///
107/// @ref s_baltst_ratsnest :
108/// Provide value-semantic attribute classes
109///
110/// @ref s_baltst_rawdata :
111/// Provide value-semantic attribute classes
112///
113/// @ref s_baltst_rawdataswitched :
114/// Provide value-semantic attribute classes
115///
116/// @ref s_baltst_rawdataunformatted :
117/// Provide value-semantic attribute classes
118///
119/// @ref s_baltst_request :
120/// Provide value-semantic attribute classes
121///
122/// @ref s_baltst_response :
123/// Provide value-semantic attribute classes
124///
125/// @ref s_baltst_sequencewithanonymity :
126/// Provide value-semantic attribute classes
127///
128/// @ref s_baltst_simplerequest :
129/// Provide value-semantic attribute classes
130///
131/// @ref s_baltst_sqrt :
132/// Provide value-semantic attribute classes
133///
134/// @ref s_baltst_sqrtf :
135/// Provide value-semantic attribute classes
136///
137/// @ref s_baltst_test :
138/// Provide a superficial test of all classes in 'baltst' package.
139///
140/// @ref s_baltst_timingrequest :
141/// Provide value-semantic attribute classes
142///
143/// @ref s_baltst_topchoice :
144/// Provide value-semantic attribute classes
145///
146/// @ref s_baltst_unsignedsequence :
147/// Provide value-semantic attribute classes
148///
149/// @ref s_baltst_voidsequence :
150/// Provide value-semantic attribute classes
151///
152/// ### Auto-Generated: Single class or struct per Component
153///
154/// @code
155/// Component 'class' or 'struct'
156/// ---------------------------------------- ------------------------------------
157/// s_baltst_address Address
158/// s_baltst_basicrecord BasicRecord
159/// s_baltst_bigrecord BigRecord
160/// s_baltst_customint CustomInt
161/// s_baltst_customizedstring CustomString
162/// s_baltst_customstring CustomizedString
163/// s_baltst_employee Employee
164/// s_baltst_enumerated Enumerated
165/// s_baltst_mychoice MyChoice
166/// s_baltst_myenumeration MyEnumeration
167/// s_baltst_mysequence MySequence
168/// s_baltst_mysequencewithanonymouschoice MySequenceWithAnonymousChoice
169/// s_baltst_mysequencewitharray MySequenceWithArray
170/// s_baltst_mysequencewithattributes MySequenceWithAttributes
171/// s_baltst_mysequencewithnillable MySequenceWithNillable
172/// s_baltst_mysequencewithnillables MySequenceWithNillables
173/// s_baltst_mysequencewithnullable MySequenceWithNullable
174/// s_baltst_mysequencewithnullables MySequenceWithNullables
175/// s_baltst_mysimplecontent MySimpleContent
176/// s_baltst_mysimpleintcontent MySimpleIntContent
177/// s_baltst_rawdata RawData
178/// s_baltst_rawdataswitched RawDataSwitched
179/// s_baltst_rawdataunformatted RawDataUnformatted
180/// s_baltst_sqrt Sqrt
181/// s_baltst_sqrtf SqrtF
182/// s_baltst_timingrequest TimingRequest
183/// s_baltst_topchoice Topchoice
184/// @endcode
185///
186/// ### Auto-generated: Multiple Classes Merged into a Single Component
187///
188/// The nine components:
189/// @code
190/// s_baltst_ratsnest{choice{1,2,3},sequence{1,2,3,4,5,6}}
191/// @endcode
192/// define the nine classes:
193/// @code
194/// Choice1
195/// Choice2
196/// Choice3
197/// Sequence1
198/// Sequence2
199/// Sequence3
200/// Sequence4
201/// Sequence5
202/// Sequence6
203/// @endcode
204/// These nine auto-generated components must be merged into a single component,
205/// @ref s_baltst_ratsnest , after being generated. See instructions under {Rat's
206/// Nest}).
207///
208/// ### Hand-Written Superficial Test Driver
209///
210/// There is only one test driver in the package. All it has is a breathing test
211/// which default constructs every value type in the package, and ensures that
212/// 'operator==' and 'operator!=' exist and work and that 'operator<<' exists.
213/// @code
214/// s_baltst_test
215/// @endcode
216///
217/// ### Schema
218///
219/// @code \
220/// s_baltst.xsd
221/// @endcode
222///
223/// ### Generation Script
224///
225/// @code
226/// s_baltst_codegen.sh
227/// @endcode
228/// To run this script, copy 'baltxt.xsd' and 's_baltst_codegen.sh' to an empty
229/// directory, and run the script there with no arguments.
230/// @code
231/// $ mkdir tmpDir
232/// $ cp s_baltst.xsd s_baltst_codegen.sh tmpDir
233/// $ cd tmpDir
234/// $ ./s_baltst_codegen.sh
235/// @endcode
236/// The script will refuse to run in the source directory where it lives, since
237/// that would write over the source there, most of which will probably not need
238/// to be changed.
239///
240/// The script will generate all the components listed in {Auto-Generated: Single
241/// 'class' or 'struct' per Component} above (but not @ref s_baltst_test ), which will
242/// not need any modification. If the changes you made to schema file
243/// 's_baltst.xsd' affect only classes in these components, you can just copy
244/// those components into your source directory, rebuild, and you are done.
245///
246/// ### Rats Nest
247///
248/// The file @ref s_baltst_ratsnest will NOT be auto-generated, instead the script
249/// will generate 9 rat's nest components, with one class apiece.
250/// @code
251/// s_baltst_ratsnestchoice1
252/// s_baltst_ratsnestchoice2
253/// s_baltst_ratsnestchoice3
254/// s_baltst_ratsnestsequence1
255/// s_baltst_ratsnestsequence2
256/// s_baltst_ratsnestsequence3
257/// s_baltst_ratsnestsequence4
258/// s_baltst_ratsnestsequence5
259/// s_baltst_ratsnestsequence6
260/// @endcode
261/// The classes in these components have a complex and sometimes circular set of
262/// dependencies, hence the name 'Rat's Nest' and the need for them to be in a
263/// single component, which shall be named @ref s_baltst_ratsnest .
264///
265/// To get the includes needed for 's_baltst_ratsnest.h', do:
266/// @code
267/// $ grep '#include' s_baltst_ratsnest*.h | sed -e 's/^.*[:]//' | sort -u
268/// @endcode
269/// and for 's_baltst_ratsnest.cpp', do:
270/// @code
271/// $ grep '#include' s_baltst_ratsnest*.cpp | sed -e 's/^.*[:]//' | sort -u
272/// @endcode
273/// However, BAS does not seem to be designed with circular dependencies in mind,
274/// and when putting classes into separate component, seems to have each component
275/// include include files from all the previously generated components, without
276/// regard to which dependencies actually exist.
277///
278/// This winds up being problematic, because a lot of other 's_baltst_*'
279/// components include 'baltst_ratsnest.h', which combined with the complex and
280/// circular dependences, results in compilation failures. But it turns out that
281/// the ONLY other 's_baltst' include files needed to be included by
282/// 's_baltst_ratsnest.h' are 's_baltst_customint.h', 's_baltst_customstring.h',
283/// and 's_baltst_enumerated.h'. Other than include files from other packages and
284/// the system, 's_baltst_ratsnest.cpp' does not need any include file other than
285/// 's_baltst_ratsnest.h'.
286///
287/// Forward declare all 9 classes at the beginning before defining them, but
288/// that's not enough, the order in which they are defined is important. Because
289/// of the dependencies, if they are defined in alphabetical order, very, very
290/// bizarre (apparently 'impossible') and hard to understand compiler errors are
291/// generated. An order of the class definitions that has been found to work is:
292/// @code
293///7. Choice1
294/// Choice2
295/// Sequence2
296/// Sequence3
297/// Sequence4
298/// Sequence5
299/// Sequence6
300/// Choice3
301/// Sequence1
302/// @endcode
303/// Define all the classes first and all definitions of inline and template
304/// functions should follow the last one.
305///
306/// The 's_baltst_ratsnest*.cpp' files can be merged into 's_baltst_ratsnest.cpp'
307/// through a similar means, though the ordering of things in that file is
308/// unimportant and can be in alphabetical order by class name.
309///
310/// If you just changed the schema for a subset of the rat's nest classes, you can
311/// hand-migrate your new work into 's_baltst_ratsnets.{h,cpp}'.
312///
313/// @}
314/** @} */