BDE 4.14.0 Production release
Loading...
Searching...
No Matches
s_baltst_ratsnest.h
Go to the documentation of this file.
1/// @file s_baltst_ratsnest.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// s_baltst_ratsnest.h *DO NOT EDIT* @generated -*-C++-*-
8#ifndef INCLUDED_S_BALTST_RATSNEST
9#define INCLUDED_S_BALTST_RATSNEST
10
11#include <bsls_ident.h>
12BSLS_IDENT_RCSID(s_baltst_ratsnest_h, "$Id$ $CSID$")
14
15/// @defgroup s_baltst_ratsnest s_baltst_ratsnest
16/// @brief Provide value-semantic attribute classes
17/// @addtogroup Standalones
18/// @{
19/// @addtogroup s_baltst
20/// @{
21/// @addtogroup s_baltst_ratsnest
22/// @{
23///
24/// <h1> Outline </h1>
25/// * <a href="#s_baltst_ratsnest-purpose"> Purpose</a>
26///
27/// # Purpose {#s_baltst_ratsnest-purpose}
28/// Provide value-semantic attribute classes
29/// @}
30/** @} */
31/** @} */
32
33/** @addtogroup Standalones
34 * @{
35 */
36/** @addtogroup s_baltst
37 * @{
38 */
39/** @addtogroup s_baltst_ratsnest
40 * @{
41 */
42
43#include <bslalg_typetraits.h>
44
45#include <bdlat_attributeinfo.h>
46
47#include <bdlat_selectioninfo.h>
48
49#include <bdlat_typetraits.h>
50
51#include <bsls_objectbuffer.h>
52
53#include <bslma_default.h>
54
55#include <bsls_assert.h>
56
58
59#include <bdlb_nullablevalue.h>
60
61#include <bdlt_datetimetz.h>
62
63#include <bsl_string.h>
64
65#include <bsl_vector.h>
66
67#include <s_baltst_customint.h>
68
70
71#include <s_baltst_enumerated.h>
72
73#include <bsl_iosfwd.h>
74#include <bsl_limits.h>
75
76
77
78namespace bslma { class Allocator; }
79
80namespace s_baltst { class Sequence3; }
81namespace s_baltst { class Sequence5; }
82namespace s_baltst { class Sequence6; }
83namespace s_baltst { class Choice3; }
84namespace s_baltst { class Choice1; }
85namespace s_baltst { class Choice2; }
86namespace s_baltst { class Sequence4; }
87namespace s_baltst { class Sequence1; }
88namespace s_baltst { class Sequence2; }
89namespace s_baltst {
90
91 // ===============
92 // class Sequence3
93 // ===============
94
95class Sequence3 {
96
97 // INSTANCE DATA
98 bsl::vector<bsl::string> d_element2;
103 bdlb::NullableValue<bool> d_element3;
104
105 public:
106 // TYPES
107 enum {
114 };
115
116 enum {
118 };
119
120 enum {
127 };
128
129 // CONSTANTS
130 static const char CLASS_NAME[];
131
133
134 public:
135 // CLASS METHODS
136
137 /// Return attribute information for the attribute indicated by the
138 /// specified `id` if the attribute exists, and 0 otherwise.
140
141 /// Return attribute information for the attribute indicated by the
142 /// specified `name` of the specified `nameLength` if the attribute
143 /// exists, and 0 otherwise.
145 const char *name,
146 int nameLength);
147
148 // CREATORS
149
150 /// Create an object of type `Sequence3` having the default value. Use
151 /// the optionally specified `basicAllocator` to supply memory. If
152 /// `basicAllocator` is 0, the currently installed default allocator is
153 /// used.
154 explicit Sequence3(bslma::Allocator *basicAllocator = 0);
155
156 /// Create an object of type `Sequence3` having the value of the
157 /// specified `original` object. Use the optionally specified
158 /// `basicAllocator` to supply memory. If `basicAllocator` is 0, the
159 /// currently installed default allocator is used.
160 Sequence3(const Sequence3& original,
161 bslma::Allocator *basicAllocator = 0);
162
163#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
164 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
165 /// Create an object of type `Sequence3` having the value of the
166 /// specified `original` object. After performing this action, the
167 /// `original` object will be left in a valid, but unspecified state.
168 Sequence3(Sequence3&& original) noexcept;
169
170 /// Create an object of type `Sequence3` having the value of the
171 /// specified `original` object. After performing this action, the
172 /// `original` object will be left in a valid, but unspecified state.
173 /// Use the optionally specified `basicAllocator` to supply memory. If
174 /// `basicAllocator` is 0, the currently installed default allocator is
175 /// used.
176 Sequence3(Sequence3&& original,
177 bslma::Allocator *basicAllocator);
178#endif
179
180 /// Destroy this object.
182
183 // MANIPULATORS
184
185 /// Assign to this object the value of the specified `rhs` object.
187
188#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
189 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
190 /// Assign to this object the value of the specified `rhs` object.
191 /// After performing this action, the `rhs` object will be left in a
192 /// valid, but unspecified state.
194#endif
195
196 /// Reset this object to the default value (i.e., its value upon
197 /// default construction).
198 void reset();
199
200 /// Invoke the specified `manipulator` sequentially on the address of
201 /// each (modifiable) attribute of this object, supplying `manipulator`
202 /// with the corresponding attribute information structure until such
203 /// invocation returns a non-zero value. Return the value from the
204 /// last invocation of `manipulator` (i.e., the invocation that
205 /// terminated the sequence).
206 template<class MANIPULATOR>
207 int manipulateAttributes(MANIPULATOR& manipulator);
208
209 /// Invoke the specified `manipulator` on the address of
210 /// the (modifiable) attribute indicated by the specified `id`,
211 /// supplying `manipulator` with the corresponding attribute
212 /// information structure. Return the value returned from the
213 /// invocation of `manipulator` if `id` identifies an attribute of this
214 /// class, and -1 otherwise.
215 template<class MANIPULATOR>
216 int manipulateAttribute(MANIPULATOR& manipulator, int id);
217
218 /// Invoke the specified `manipulator` on the address of
219 /// the (modifiable) attribute indicated by the specified `name` of the
220 /// specified `nameLength`, supplying `manipulator` with the
221 /// corresponding attribute information structure. Return the value
222 /// returned from the invocation of `manipulator` if `name` identifies
223 /// an attribute of this class, and -1 otherwise.
224 template<class MANIPULATOR>
225 int manipulateAttribute(MANIPULATOR& manipulator,
226 const char *name,
227 int nameLength);
228
229 /// Return a reference to the modifiable "Element1" attribute of this
230 /// object.
232
233 /// Return a reference to the modifiable "Element2" attribute of this
234 /// object.
236
237 /// Return a reference to the modifiable "Element3" attribute of this
238 /// object.
240
241 /// Return a reference to the modifiable "Element4" attribute of this
242 /// object.
244
245 /// Return a reference to the modifiable "Element5" attribute of this
246 /// object.
248
249 /// Return a reference to the modifiable "Element6" attribute of this
250 /// object.
252
253 // ACCESSORS
254
255 /// Format this object to the specified output `stream` at the
256 /// optionally specified indentation `level` and return a reference to
257 /// the modifiable `stream`. If `level` is specified, optionally
258 /// specify `spacesPerLevel`, the number of spaces per indentation level
259 /// for this and all of its nested objects. Each line is indented by
260 /// the absolute value of `level * spacesPerLevel`. If `level` is
261 /// negative, suppress indentation of the first line. If
262 /// `spacesPerLevel` is negative, suppress line breaks and format the
263 /// entire output on one line. If `stream` is initially invalid, this
264 /// operation has no effect. Note that a trailing newline is provided
265 /// in multiline mode only.
266 bsl::ostream& print(bsl::ostream& stream,
267 int level = 0,
268 int spacesPerLevel = 4) const;
269
270 /// Invoke the specified `accessor` sequentially on each
271 /// (non-modifiable) attribute of this object, supplying `accessor`
272 /// with the corresponding attribute information structure until such
273 /// invocation returns a non-zero value. Return the value from the
274 /// last invocation of `accessor` (i.e., the invocation that terminated
275 /// the sequence).
276 template<class ACCESSOR>
277 int accessAttributes(ACCESSOR& accessor) const;
278
279 /// Invoke the specified `accessor` on the (non-modifiable) attribute
280 /// of this object indicated by the specified `id`, supplying `accessor`
281 /// with the corresponding attribute information structure. Return the
282 /// value returned from the invocation of `accessor` if `id` identifies
283 /// an attribute of this class, and -1 otherwise.
284 template<class ACCESSOR>
285 int accessAttribute(ACCESSOR& accessor, int id) const;
286
287 /// Invoke the specified `accessor` on the (non-modifiable) attribute
288 /// of this object indicated by the specified `name` of the specified
289 /// `nameLength`, supplying `accessor` with the corresponding attribute
290 /// information structure. Return the value returned from the
291 /// invocation of `accessor` if `name` identifies an attribute of this
292 /// class, and -1 otherwise.
293 template<class ACCESSOR>
294 int accessAttribute(ACCESSOR& accessor,
295 const char *name,
296 int nameLength) const;
297
298 /// Return a reference offering non-modifiable access to the "Element1"
299 /// attribute of this object.
301
302 /// Return a reference offering non-modifiable access to the "Element2"
303 /// attribute of this object.
304 const bsl::vector<bsl::string>& element2() const;
305
306 /// Return a reference offering non-modifiable access to the "Element3"
307 /// attribute of this object.
308 const bdlb::NullableValue<bool>& element3() const;
309
310 /// Return a reference offering non-modifiable access to the "Element4"
311 /// attribute of this object.
313
314 /// Return a reference offering non-modifiable access to the "Element5"
315 /// attribute of this object.
317
318 /// Return a reference offering non-modifiable access to the "Element6"
319 /// attribute of this object.
321};
322
323// FREE OPERATORS
324
325/// Return `true` if the specified `lhs` and `rhs` attribute objects have
326/// the same value, and `false` otherwise. Two attribute objects have the
327/// same value if each respective attribute has the same value.
328inline
329bool operator==(const Sequence3& lhs, const Sequence3& rhs);
330
331/// Return `true` if the specified `lhs` and `rhs` attribute objects do not
332/// have the same value, and `false` otherwise. Two attribute objects do
333/// not have the same value if one or more respective attributes differ in
334/// values.
335inline
336bool operator!=(const Sequence3& lhs, const Sequence3& rhs);
337
338/// Format the specified `rhs` to the specified output `stream` and
339/// return a reference to the modifiable `stream`.
340inline
341bsl::ostream& operator<<(bsl::ostream& stream, const Sequence3& rhs);
342
343} // close package namespace
344
345// TRAITS
346
348
349namespace s_baltst {
350
351 // ===============
352 // class Sequence5
353 // ===============
354
356
357 // INSTANCE DATA
358 bslma::Allocator *d_allocator_p;
365 Sequence3 *d_element1;
366
367 public:
368 // TYPES
369 enum {
377 };
378
379 enum {
381 };
382
383 enum {
391 };
392
393 // CONSTANTS
394 static const char CLASS_NAME[];
395
397
398 public:
399 // CLASS METHODS
400
401 /// Return attribute information for the attribute indicated by the
402 /// specified `id` if the attribute exists, and 0 otherwise.
404
405 /// Return attribute information for the attribute indicated by the
406 /// specified `name` of the specified `nameLength` if the attribute
407 /// exists, and 0 otherwise.
409 const char *name,
410 int nameLength);
411
412 // CREATORS
413
414 /// Create an object of type `Sequence5` having the default value. Use
415 /// the optionally specified `basicAllocator` to supply memory. If
416 /// `basicAllocator` is 0, the currently installed default allocator is
417 /// used.
418 explicit Sequence5(bslma::Allocator *basicAllocator = 0);
419
420 /// Create an object of type `Sequence5` having the value of the
421 /// specified `original` object. Use the optionally specified
422 /// `basicAllocator` to supply memory. If `basicAllocator` is 0, the
423 /// currently installed default allocator is used.
424 Sequence5(const Sequence5& original,
425 bslma::Allocator *basicAllocator = 0);
426
427#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
428 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
429 /// Create an object of type `Sequence5` having the value of the
430 /// specified `original` object. After performing this action, the
431 /// `original` object will be left in a valid, but unspecified state.
432 Sequence5(Sequence5&& original) noexcept;
433
434 /// Create an object of type `Sequence5` having the value of the
435 /// specified `original` object. After performing this action, the
436 /// `original` object will be left in a valid, but unspecified state.
437 /// Use the optionally specified `basicAllocator` to supply memory. If
438 /// `basicAllocator` is 0, the currently installed default allocator is
439 /// used.
440 Sequence5(Sequence5&& original,
441 bslma::Allocator *basicAllocator);
442#endif
443
444 /// Destroy this object.
446
447 // MANIPULATORS
448
449 /// Assign to this object the value of the specified `rhs` object.
451
452#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
453 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
454 /// Assign to this object the value of the specified `rhs` object.
455 /// After performing this action, the `rhs` object will be left in a
456 /// valid, but unspecified state.
458#endif
459
460 /// Reset this object to the default value (i.e., its value upon
461 /// default construction).
462 void reset();
463
464 /// Invoke the specified `manipulator` sequentially on the address of
465 /// each (modifiable) attribute of this object, supplying `manipulator`
466 /// with the corresponding attribute information structure until such
467 /// invocation returns a non-zero value. Return the value from the
468 /// last invocation of `manipulator` (i.e., the invocation that
469 /// terminated the sequence).
470 template<class MANIPULATOR>
471 int manipulateAttributes(MANIPULATOR& manipulator);
472
473 /// Invoke the specified `manipulator` on the address of
474 /// the (modifiable) attribute indicated by the specified `id`,
475 /// supplying `manipulator` with the corresponding attribute
476 /// information structure. Return the value returned from the
477 /// invocation of `manipulator` if `id` identifies an attribute of this
478 /// class, and -1 otherwise.
479 template<class MANIPULATOR>
480 int manipulateAttribute(MANIPULATOR& manipulator, int id);
481
482 /// Invoke the specified `manipulator` on the address of
483 /// the (modifiable) attribute indicated by the specified `name` of the
484 /// specified `nameLength`, supplying `manipulator` with the
485 /// corresponding attribute information structure. Return the value
486 /// returned from the invocation of `manipulator` if `name` identifies
487 /// an attribute of this class, and -1 otherwise.
488 template<class MANIPULATOR>
489 int manipulateAttribute(MANIPULATOR& manipulator,
490 const char *name,
491 int nameLength);
492
493 /// Return a reference to the modifiable "Element1" attribute of this
494 /// object.
496
497 /// Return a reference to the modifiable "Element2" attribute of this
498 /// object.
500
501 /// Return a reference to the modifiable "Element3" attribute of this
502 /// object.
504
505 /// Return a reference to the modifiable "Element4" attribute of this
506 /// object.
508
509 /// Return a reference to the modifiable "Element5" attribute of this
510 /// object.
512
513 /// Return a reference to the modifiable "Element6" attribute of this
514 /// object.
516
517 /// Return a reference to the modifiable "Element7" attribute of this
518 /// object.
520
521 // ACCESSORS
522
523 /// Format this object to the specified output `stream` at the
524 /// optionally specified indentation `level` and return a reference to
525 /// the modifiable `stream`. If `level` is specified, optionally
526 /// specify `spacesPerLevel`, the number of spaces per indentation level
527 /// for this and all of its nested objects. Each line is indented by
528 /// the absolute value of `level * spacesPerLevel`. If `level` is
529 /// negative, suppress indentation of the first line. If
530 /// `spacesPerLevel` is negative, suppress line breaks and format the
531 /// entire output on one line. If `stream` is initially invalid, this
532 /// operation has no effect. Note that a trailing newline is provided
533 /// in multiline mode only.
534 bsl::ostream& print(bsl::ostream& stream,
535 int level = 0,
536 int spacesPerLevel = 4) const;
537
538 /// Invoke the specified `accessor` sequentially on each
539 /// (non-modifiable) attribute of this object, supplying `accessor`
540 /// with the corresponding attribute information structure until such
541 /// invocation returns a non-zero value. Return the value from the
542 /// last invocation of `accessor` (i.e., the invocation that terminated
543 /// the sequence).
544 template<class ACCESSOR>
545 int accessAttributes(ACCESSOR& accessor) const;
546
547 /// Invoke the specified `accessor` on the (non-modifiable) attribute
548 /// of this object indicated by the specified `id`, supplying `accessor`
549 /// with the corresponding attribute information structure. Return the
550 /// value returned from the invocation of `accessor` if `id` identifies
551 /// an attribute of this class, and -1 otherwise.
552 template<class ACCESSOR>
553 int accessAttribute(ACCESSOR& accessor, int id) const;
554
555 /// Invoke the specified `accessor` on the (non-modifiable) attribute
556 /// of this object indicated by the specified `name` of the specified
557 /// `nameLength`, supplying `accessor` with the corresponding attribute
558 /// information structure. Return the value returned from the
559 /// invocation of `accessor` if `name` identifies an attribute of this
560 /// class, and -1 otherwise.
561 template<class ACCESSOR>
562 int accessAttribute(ACCESSOR& accessor,
563 const char *name,
564 int nameLength) const;
565
566 /// Return a reference offering non-modifiable access to the "Element1"
567 /// attribute of this object.
568 const Sequence3& element1() const;
569
570 /// Return a reference offering non-modifiable access to the "Element2"
571 /// attribute of this object.
573
574 /// Return a reference offering non-modifiable access to the "Element3"
575 /// attribute of this object.
577
578 /// Return a reference offering non-modifiable access to the "Element4"
579 /// attribute of this object.
581
582 /// Return a reference offering non-modifiable access to the "Element5"
583 /// attribute of this object.
585
586 /// Return a reference offering non-modifiable access to the "Element6"
587 /// attribute of this object.
589
590 /// Return a reference offering non-modifiable access to the "Element7"
591 /// attribute of this object.
593};
594
595// FREE OPERATORS
596
597/// Return `true` if the specified `lhs` and `rhs` attribute objects have
598/// the same value, and `false` otherwise. Two attribute objects have the
599/// same value if each respective attribute has the same value.
600inline
601bool operator==(const Sequence5& lhs, const Sequence5& rhs);
602
603/// Return `true` if the specified `lhs` and `rhs` attribute objects do not
604/// have the same value, and `false` otherwise. Two attribute objects do
605/// not have the same value if one or more respective attributes differ in
606/// values.
607inline
608bool operator!=(const Sequence5& lhs, const Sequence5& rhs);
609
610/// Format the specified `rhs` to the specified output `stream` and
611/// return a reference to the modifiable `stream`.
612inline
613bsl::ostream& operator<<(bsl::ostream& stream, const Sequence5& rhs);
614
615} // close package namespace
616
617// TRAITS
618
620
621namespace s_baltst {
622
623 // ===============
624 // class Sequence6
625 // ===============
626
628
629 // INSTANCE DATA
630 s_baltst::CustomString d_element7;
631 bsl::vector<unsigned int> d_element12;
632 bsl::vector<unsigned char> d_element10;
637 unsigned int d_element4;
638 s_baltst::CustomInt d_element8;
643 unsigned char d_element5;
645
646 public:
647 // TYPES
648 enum {
664 };
665
666 enum {
667 NUM_ATTRIBUTES = 15
668 };
669
670 enum {
686 };
687
688 // CONSTANTS
689 static const char CLASS_NAME[];
690
692
693 public:
694 // CLASS METHODS
695
696 /// Return attribute information for the attribute indicated by the
697 /// specified `id` if the attribute exists, and 0 otherwise.
699
700 /// Return attribute information for the attribute indicated by the
701 /// specified `name` of the specified `nameLength` if the attribute
702 /// exists, and 0 otherwise.
704 const char *name,
705 int nameLength);
706
707 // CREATORS
708
709 /// Create an object of type `Sequence6` having the default value. Use
710 /// the optionally specified `basicAllocator` to supply memory. If
711 /// `basicAllocator` is 0, the currently installed default allocator is
712 /// used.
713 explicit Sequence6(bslma::Allocator *basicAllocator = 0);
714
715 /// Create an object of type `Sequence6` having the value of the
716 /// specified `original` object. Use the optionally specified
717 /// `basicAllocator` to supply memory. If `basicAllocator` is 0, the
718 /// currently installed default allocator is used.
719 Sequence6(const Sequence6& original,
720 bslma::Allocator *basicAllocator = 0);
721
722#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
723 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
724 /// Create an object of type `Sequence6` having the value of the
725 /// specified `original` object. After performing this action, the
726 /// `original` object will be left in a valid, but unspecified state.
727 Sequence6(Sequence6&& original) noexcept;
728
729 /// Create an object of type `Sequence6` having the value of the
730 /// specified `original` object. After performing this action, the
731 /// `original` object will be left in a valid, but unspecified state.
732 /// Use the optionally specified `basicAllocator` to supply memory. If
733 /// `basicAllocator` is 0, the currently installed default allocator is
734 /// used.
735 Sequence6(Sequence6&& original,
736 bslma::Allocator *basicAllocator);
737#endif
738
739 /// Destroy this object.
741
742 // MANIPULATORS
743
744 /// Assign to this object the value of the specified `rhs` object.
746
747#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
748 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
749 /// Assign to this object the value of the specified `rhs` object.
750 /// After performing this action, the `rhs` object will be left in a
751 /// valid, but unspecified state.
753#endif
754
755 /// Reset this object to the default value (i.e., its value upon
756 /// default construction).
757 void reset();
758
759 /// Invoke the specified `manipulator` sequentially on the address of
760 /// each (modifiable) attribute of this object, supplying `manipulator`
761 /// with the corresponding attribute information structure until such
762 /// invocation returns a non-zero value. Return the value from the
763 /// last invocation of `manipulator` (i.e., the invocation that
764 /// terminated the sequence).
765 template<class MANIPULATOR>
766 int manipulateAttributes(MANIPULATOR& manipulator);
767
768 /// Invoke the specified `manipulator` on the address of
769 /// the (modifiable) attribute indicated by the specified `id`,
770 /// supplying `manipulator` with the corresponding attribute
771 /// information structure. Return the value returned from the
772 /// invocation of `manipulator` if `id` identifies an attribute of this
773 /// class, and -1 otherwise.
774 template<class MANIPULATOR>
775 int manipulateAttribute(MANIPULATOR& manipulator, int id);
776
777 /// Invoke the specified `manipulator` on the address of
778 /// the (modifiable) attribute indicated by the specified `name` of the
779 /// specified `nameLength`, supplying `manipulator` with the
780 /// corresponding attribute information structure. Return the value
781 /// returned from the invocation of `manipulator` if `name` identifies
782 /// an attribute of this class, and -1 otherwise.
783 template<class MANIPULATOR>
784 int manipulateAttribute(MANIPULATOR& manipulator,
785 const char *name,
786 int nameLength);
787
788 /// Return a reference to the modifiable "Element1" attribute of this
789 /// object.
791
792 /// Return a reference to the modifiable "Element2" attribute of this
793 /// object.
795
796 /// Return a reference to the modifiable "Element3" attribute of this
797 /// object.
799
800 /// Return a reference to the modifiable "Element4" attribute of this
801 /// object.
802 unsigned int& element4();
803
804 /// Return a reference to the modifiable "Element5" attribute of this
805 /// object.
806 unsigned char& element5();
807
808 /// Return a reference to the modifiable "Element6" attribute of this
809 /// object.
811
812 /// Return a reference to the modifiable "Element7" attribute of this
813 /// object.
815
816 /// Return a reference to the modifiable "Element8" attribute of this
817 /// object.
819
820 /// Return a reference to the modifiable "Element9" attribute of this
821 /// object.
823
824 /// Return a reference to the modifiable "Element10" attribute of this
825 /// object.
827
828 /// Return a reference to the modifiable "Element11" attribute of this
829 /// object.
831
832 /// Return a reference to the modifiable "Element12" attribute of this
833 /// object.
835
836 /// Return a reference to the modifiable "Element13" attribute of this
837 /// object.
839
840 /// Return a reference to the modifiable "Element14" attribute of this
841 /// object.
843
844 /// Return a reference to the modifiable "Element15" attribute of this
845 /// object.
847
848 // ACCESSORS
849
850 /// Format this object to the specified output `stream` at the
851 /// optionally specified indentation `level` and return a reference to
852 /// the modifiable `stream`. If `level` is specified, optionally
853 /// specify `spacesPerLevel`, the number of spaces per indentation level
854 /// for this and all of its nested objects. Each line is indented by
855 /// the absolute value of `level * spacesPerLevel`. If `level` is
856 /// negative, suppress indentation of the first line. If
857 /// `spacesPerLevel` is negative, suppress line breaks and format the
858 /// entire output on one line. If `stream` is initially invalid, this
859 /// operation has no effect. Note that a trailing newline is provided
860 /// in multiline mode only.
861 bsl::ostream& print(bsl::ostream& stream,
862 int level = 0,
863 int spacesPerLevel = 4) const;
864
865 /// Invoke the specified `accessor` sequentially on each
866 /// (non-modifiable) attribute of this object, supplying `accessor`
867 /// with the corresponding attribute information structure until such
868 /// invocation returns a non-zero value. Return the value from the
869 /// last invocation of `accessor` (i.e., the invocation that terminated
870 /// the sequence).
871 template<class ACCESSOR>
872 int accessAttributes(ACCESSOR& accessor) const;
873
874 /// Invoke the specified `accessor` on the (non-modifiable) attribute
875 /// of this object indicated by the specified `id`, supplying `accessor`
876 /// with the corresponding attribute information structure. Return the
877 /// value returned from the invocation of `accessor` if `id` identifies
878 /// an attribute of this class, and -1 otherwise.
879 template<class ACCESSOR>
880 int accessAttribute(ACCESSOR& accessor, int id) const;
881
882 /// Invoke the specified `accessor` on the (non-modifiable) attribute
883 /// of this object indicated by the specified `name` of the specified
884 /// `nameLength`, supplying `accessor` with the corresponding attribute
885 /// information structure. Return the value returned from the
886 /// invocation of `accessor` if `name` identifies an attribute of this
887 /// class, and -1 otherwise.
888 template<class ACCESSOR>
889 int accessAttribute(ACCESSOR& accessor,
890 const char *name,
891 int nameLength) const;
892
893 /// Return a reference offering non-modifiable access to the "Element1"
894 /// attribute of this object.
896
897 /// Return a reference offering non-modifiable access to the "Element2"
898 /// attribute of this object.
900
901 /// Return a reference offering non-modifiable access to the "Element3"
902 /// attribute of this object.
904
905 /// Return the value of the "Element4" attribute of this object.
906 unsigned int element4() const;
907
908 /// Return the value of the "Element5" attribute of this object.
909 unsigned char element5() const;
910
911 /// Return a reference offering non-modifiable access to the "Element6"
912 /// attribute of this object.
914
915 /// Return a reference offering non-modifiable access to the "Element7"
916 /// attribute of this object.
917 const s_baltst::CustomString& element7() const;
918
919 /// Return a reference offering non-modifiable access to the "Element8"
920 /// attribute of this object.
921 const s_baltst::CustomInt& element8() const;
922
923 /// Return a reference offering non-modifiable access to the "Element9"
924 /// attribute of this object.
926
927 /// Return a reference offering non-modifiable access to the "Element10"
928 /// attribute of this object.
930
931 /// Return a reference offering non-modifiable access to the "Element11"
932 /// attribute of this object.
934
935 /// Return a reference offering non-modifiable access to the "Element12"
936 /// attribute of this object.
938
939 /// Return a reference offering non-modifiable access to the "Element13"
940 /// attribute of this object.
942
943 /// Return a reference offering non-modifiable access to the "Element14"
944 /// attribute of this object.
946
947 /// Return a reference offering non-modifiable access to the "Element15"
948 /// attribute of this object.
950};
951
952// FREE OPERATORS
953
954/// Return `true` if the specified `lhs` and `rhs` attribute objects have
955/// the same value, and `false` otherwise. Two attribute objects have the
956/// same value if each respective attribute has the same value.
957inline
958bool operator==(const Sequence6& lhs, const Sequence6& rhs);
959
960/// Return `true` if the specified `lhs` and `rhs` attribute objects do not
961/// have the same value, and `false` otherwise. Two attribute objects do
962/// not have the same value if one or more respective attributes differ in
963/// values.
964inline
965bool operator!=(const Sequence6& lhs, const Sequence6& rhs);
966
967/// Format the specified `rhs` to the specified output `stream` and
968/// return a reference to the modifiable `stream`.
969inline
970bsl::ostream& operator<<(bsl::ostream& stream, const Sequence6& rhs);
971
972} // close package namespace
973
974// TRAITS
975
977
978namespace s_baltst {
979
980 // =============
981 // class Choice3
982 // =============
983
984class Choice3 {
985
986 // INSTANCE DATA
987 union {
992 };
993
994 int d_selectionId;
995 bslma::Allocator *d_allocator_p;
996
997 public:
998 // TYPES
999
1000 enum {
1007
1008 enum {
1009 NUM_SELECTIONS = 4
1011
1012 enum {
1018
1019 // CONSTANTS
1020 static const char CLASS_NAME[];
1021
1023
1024 // CLASS METHODS
1025
1026 /// Return selection information for the selection indicated by the
1027 /// specified `id` if the selection exists, and 0 otherwise.
1029
1030 /// Return selection information for the selection indicated by the
1031 /// specified `name` of the specified `nameLength` if the selection
1032 /// exists, and 0 otherwise.
1034 const char *name,
1035 int nameLength);
1036
1037 // CREATORS
1038
1039 /// Create an object of type `Choice3` having the default value. Use
1040 /// the optionally specified `basicAllocator` to supply memory. If
1041 /// `basicAllocator` is 0, the currently installed default allocator is
1042 /// used.
1043 explicit Choice3(bslma::Allocator *basicAllocator = 0);
1044
1045 /// Create an object of type `Choice3` having the value of the specified
1046 /// `original` object. Use the optionally specified `basicAllocator` to
1047 /// supply memory. If `basicAllocator` is 0, the currently installed
1048 /// default allocator is used.
1049 Choice3(const Choice3& original,
1050 bslma::Allocator *basicAllocator = 0);
1051
1052#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1053 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1054 /// Create an object of type `Choice3` having the value of the specified
1055 /// `original` object. After performing this action, the `original`
1056 /// object will be left in a valid, but unspecified state.
1057 Choice3(Choice3&& original) noexcept;
1058
1059 /// Create an object of type `Choice3` having the value of the specified
1060 /// `original` object. After performing this action, the `original`
1061 /// object will be left in a valid, but unspecified state. Use the
1062 /// optionally specified `basicAllocator` to supply memory. If
1063 /// `basicAllocator` is 0, the currently installed default allocator is
1064 /// used.
1065 Choice3(Choice3&& original,
1066 bslma::Allocator *basicAllocator);
1067#endif
1068
1069 /// Destroy this object.
1070 ~Choice3();
1071
1072 // MANIPULATORS
1073
1074 /// Assign to this object the value of the specified `rhs` object.
1076
1077#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1078 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1079 /// Assign to this object the value of the specified `rhs` object.
1080 /// After performing this action, the `rhs` object will be left in a
1081 /// valid, but unspecified state.
1082 Choice3& operator=(Choice3&& rhs);
1083#endif
1084
1085 /// Reset this object to the default value (i.e., its value upon default
1086 /// construction).
1087 void reset();
1088
1089 /// Set the value of this object to be the default for the selection
1090 /// indicated by the specified `selectionId`. Return 0 on success, and
1091 /// non-zero value otherwise (i.e., the selection is not found).
1093
1094 /// Set the value of this object to be the default for the selection
1095 /// indicated by the specified `name` of the specified `nameLength`.
1096 /// Return 0 on success, and non-zero value otherwise (i.e., the
1097 /// selection is not found).
1098 int makeSelection(const char *name, int nameLength);
1099
1102#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1103 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1105#endif
1106 // Set the value of this object to be a "Selection1" value. Optionally
1107 // specify the 'value' of the "Selection1". If 'value' is not
1108 // specified, the default "Selection1" value is used.
1109
1110 /// Set the value of this object to be a "Selection2" value. Optionally
1111 /// specify the `value` of the "Selection2". If `value` is not
1112 /// specified, the default "Selection2" value is used.
1113 unsigned char& makeSelection2();
1114 unsigned char& makeSelection2(unsigned char value);
1115
1118#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1119 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1121#endif
1122 // Set the value of this object to be a "Selection3" value. Optionally
1123 // specify the 'value' of the "Selection3". If 'value' is not
1124 // specified, the default "Selection3" value is used.
1125
1128#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1129 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1131#endif
1132 // Set the value of this object to be a "Selection4" value. Optionally
1133 // specify the 'value' of the "Selection4". If 'value' is not
1134 // specified, the default "Selection4" value is used.
1135
1136 /// Invoke the specified `manipulator` on the address of the modifiable
1137 /// selection, supplying `manipulator` with the corresponding selection
1138 /// information structure. Return the value returned from the
1139 /// invocation of `manipulator` if this object has a defined selection,
1140 /// and -1 otherwise.
1141 template<class MANIPULATOR>
1142 int manipulateSelection(MANIPULATOR& manipulator);
1143
1144 /// Return a reference to the modifiable "Selection1" selection of this
1145 /// object if "Selection1" is the current selection. The behavior is
1146 /// undefined unless "Selection1" is the selection of this object.
1148
1149 /// Return a reference to the modifiable "Selection2" selection of this
1150 /// object if "Selection2" is the current selection. The behavior is
1151 /// undefined unless "Selection2" is the selection of this object.
1152 unsigned char& selection2();
1153
1154 /// Return a reference to the modifiable "Selection3" selection of this
1155 /// object if "Selection3" is the current selection. The behavior is
1156 /// undefined unless "Selection3" is the selection of this object.
1158
1159 /// Return a reference to the modifiable "Selection4" selection of this
1160 /// object if "Selection4" is the current selection. The behavior is
1161 /// undefined unless "Selection4" is the selection of this object.
1163
1164 // ACCESSORS
1165
1166 /// Format this object to the specified output `stream` at the
1167 /// optionally specified indentation `level` and return a reference to
1168 /// the modifiable `stream`. If `level` is specified, optionally
1169 /// specify `spacesPerLevel`, the number of spaces per indentation level
1170 /// for this and all of its nested objects. Each line is indented by
1171 /// the absolute value of `level * spacesPerLevel`. If `level` is
1172 /// negative, suppress indentation of the first line. If
1173 /// `spacesPerLevel` is negative, suppress line breaks and format the
1174 /// entire output on one line. If `stream` is initially invalid, this
1175 /// operation has no effect. Note that a trailing newline is provided
1176 /// in multiline mode only.
1177 bsl::ostream& print(bsl::ostream& stream,
1178 int level = 0,
1179 int spacesPerLevel = 4) const;
1180
1181 /// Return the id of the current selection if the selection is defined,
1182 /// and -1 otherwise.
1183 int selectionId() const;
1184
1185 /// Invoke the specified `accessor` on the non-modifiable selection,
1186 /// supplying `accessor` with the corresponding selection information
1187 /// structure. Return the value returned from the invocation of
1188 /// `accessor` if this object has a defined selection, and -1 otherwise.
1189 template<class ACCESSOR>
1190 int accessSelection(ACCESSOR& accessor) const;
1191
1192 /// Return a reference to the non-modifiable "Selection1" selection of
1193 /// this object if "Selection1" is the current selection. The behavior
1194 /// is undefined unless "Selection1" is the selection of this object.
1195 const Sequence6& selection1() const;
1196
1197 /// Return a reference to the non-modifiable "Selection2" selection of
1198 /// this object if "Selection2" is the current selection. The behavior
1199 /// is undefined unless "Selection2" is the selection of this object.
1200 const unsigned char& selection2() const;
1201
1202 /// Return a reference to the non-modifiable "Selection3" selection of
1203 /// this object if "Selection3" is the current selection. The behavior
1204 /// is undefined unless "Selection3" is the selection of this object.
1205 const s_baltst::CustomString& selection3() const;
1206
1207 /// Return a reference to the non-modifiable "Selection4" selection of
1208 /// this object if "Selection4" is the current selection. The behavior
1209 /// is undefined unless "Selection4" is the selection of this object.
1210 const s_baltst::CustomInt& selection4() const;
1211
1212 /// Return `true` if the value of this object is a "Selection1" value,
1213 /// and return `false` otherwise.
1214 bool isSelection1Value() const;
1215
1216 /// Return `true` if the value of this object is a "Selection2" value,
1217 /// and return `false` otherwise.
1218 bool isSelection2Value() const;
1219
1220 /// Return `true` if the value of this object is a "Selection3" value,
1221 /// and return `false` otherwise.
1222 bool isSelection3Value() const;
1223
1224 /// Return `true` if the value of this object is a "Selection4" value,
1225 /// and return `false` otherwise.
1226 bool isSelection4Value() const;
1227
1228 /// Return `true` if the value of this object is undefined, and `false`
1229 /// otherwise.
1230 bool isUndefinedValue() const;
1231
1232 /// Return the symbolic name of the current selection of this object.
1233 const char *selectionName() const;
1234};
1235
1236// FREE OPERATORS
1237
1238/// Return `true` if the specified `lhs` and `rhs` objects have the same
1239/// value, and `false` otherwise. Two `Choice3` objects have the same
1240/// value if either the selections in both objects have the same ids and
1241/// the same values, or both selections are undefined.
1242inline
1243bool operator==(const Choice3& lhs, const Choice3& rhs);
1244
1245/// Return `true` if the specified `lhs` and `rhs` objects do not have the
1246/// same values, as determined by `operator==`, and `false` otherwise.
1247inline
1248bool operator!=(const Choice3& lhs, const Choice3& rhs);
1249
1250/// Format the specified `rhs` to the specified output `stream` and
1251/// return a reference to the modifiable `stream`.
1252inline
1253bsl::ostream& operator<<(bsl::ostream& stream, const Choice3& rhs);
1254
1255} // close package namespace
1256
1257// TRAITS
1258
1260
1261namespace s_baltst {
1262
1263 // =============
1264 // class Choice1
1265 // =============
1266
1267class Choice1 {
1268
1269 // INSTANCE DATA
1270 union {
1275 };
1276
1277 int d_selectionId;
1278 bslma::Allocator *d_allocator_p;
1279
1280 public:
1281 // TYPES
1282
1283 enum {
1290
1291 enum {
1292 NUM_SELECTIONS = 4
1294
1295 enum {
1301
1302 // CONSTANTS
1303 static const char CLASS_NAME[];
1304
1306
1307 // CLASS METHODS
1308
1309 /// Return selection information for the selection indicated by the
1310 /// specified `id` if the selection exists, and 0 otherwise.
1312
1313 /// Return selection information for the selection indicated by the
1314 /// specified `name` of the specified `nameLength` if the selection
1315 /// exists, and 0 otherwise.
1317 const char *name,
1318 int nameLength);
1319
1320 // CREATORS
1321
1322 /// Create an object of type `Choice1` having the default value. Use
1323 /// the optionally specified `basicAllocator` to supply memory. If
1324 /// `basicAllocator` is 0, the currently installed default allocator is
1325 /// used.
1326 explicit Choice1(bslma::Allocator *basicAllocator = 0);
1327
1328 /// Create an object of type `Choice1` having the value of the specified
1329 /// `original` object. Use the optionally specified `basicAllocator` to
1330 /// supply memory. If `basicAllocator` is 0, the currently installed
1331 /// default allocator is used.
1332 Choice1(const Choice1& original,
1333 bslma::Allocator *basicAllocator = 0);
1334
1335#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1336 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1337 /// Create an object of type `Choice1` having the value of the specified
1338 /// `original` object. After performing this action, the `original`
1339 /// object will be left in a valid, but unspecified state.
1340 Choice1(Choice1&& original) noexcept;
1341
1342 /// Create an object of type `Choice1` having the value of the specified
1343 /// `original` object. After performing this action, the `original`
1344 /// object will be left in a valid, but unspecified state. Use the
1345 /// optionally specified `basicAllocator` to supply memory. If
1346 /// `basicAllocator` is 0, the currently installed default allocator is
1347 /// used.
1348 Choice1(Choice1&& original,
1349 bslma::Allocator *basicAllocator);
1350#endif
1351
1352 /// Destroy this object.
1353 ~Choice1();
1354
1355 // MANIPULATORS
1356
1357 /// Assign to this object the value of the specified `rhs` object.
1359
1360#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1361 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1362 /// Assign to this object the value of the specified `rhs` object.
1363 /// After performing this action, the `rhs` object will be left in a
1364 /// valid, but unspecified state.
1365 Choice1& operator=(Choice1&& rhs);
1366#endif
1367
1368 /// Reset this object to the default value (i.e., its value upon default
1369 /// construction).
1370 void reset();
1371
1372 /// Set the value of this object to be the default for the selection
1373 /// indicated by the specified `selectionId`. Return 0 on success, and
1374 /// non-zero value otherwise (i.e., the selection is not found).
1376
1377 /// Set the value of this object to be the default for the selection
1378 /// indicated by the specified `name` of the specified `nameLength`.
1379 /// Return 0 on success, and non-zero value otherwise (i.e., the
1380 /// selection is not found).
1381 int makeSelection(const char *name, int nameLength);
1382
1383 /// Set the value of this object to be a "Selection1" value. Optionally
1384 /// specify the `value` of the "Selection1". If `value` is not
1385 /// specified, the default "Selection1" value is used.
1387 int& makeSelection1(int value);
1388
1389 /// Set the value of this object to be a "Selection2" value. Optionally
1390 /// specify the `value` of the "Selection2". If `value` is not
1391 /// specified, the default "Selection2" value is used.
1393 double& makeSelection2(double value);
1394
1397#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1398 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1400#endif
1401 // Set the value of this object to be a "Selection3" value. Optionally
1402 // specify the 'value' of the "Selection3". If 'value' is not
1403 // specified, the default "Selection3" value is used.
1404
1407#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1408 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1409 Choice2& makeSelection4(Choice2&& value);
1410#endif
1411 // Set the value of this object to be a "Selection4" value. Optionally
1412 // specify the 'value' of the "Selection4". If 'value' is not
1413 // specified, the default "Selection4" value is used.
1414
1415 /// Invoke the specified `manipulator` on the address of the modifiable
1416 /// selection, supplying `manipulator` with the corresponding selection
1417 /// information structure. Return the value returned from the
1418 /// invocation of `manipulator` if this object has a defined selection,
1419 /// and -1 otherwise.
1420 template<class MANIPULATOR>
1421 int manipulateSelection(MANIPULATOR& manipulator);
1422
1423 /// Return a reference to the modifiable "Selection1" selection of this
1424 /// object if "Selection1" is the current selection. The behavior is
1425 /// undefined unless "Selection1" is the selection of this object.
1426 int& selection1();
1427
1428 /// Return a reference to the modifiable "Selection2" selection of this
1429 /// object if "Selection2" is the current selection. The behavior is
1430 /// undefined unless "Selection2" is the selection of this object.
1431 double& selection2();
1432
1433 /// Return a reference to the modifiable "Selection3" selection of this
1434 /// object if "Selection3" is the current selection. The behavior is
1435 /// undefined unless "Selection3" is the selection of this object.
1437
1438 /// Return a reference to the modifiable "Selection4" selection of this
1439 /// object if "Selection4" is the current selection. The behavior is
1440 /// undefined unless "Selection4" is the selection of this object.
1442
1443 // ACCESSORS
1444
1445 /// Format this object to the specified output `stream` at the
1446 /// optionally specified indentation `level` and return a reference to
1447 /// the modifiable `stream`. If `level` is specified, optionally
1448 /// specify `spacesPerLevel`, the number of spaces per indentation level
1449 /// for this and all of its nested objects. Each line is indented by
1450 /// the absolute value of `level * spacesPerLevel`. If `level` is
1451 /// negative, suppress indentation of the first line. If
1452 /// `spacesPerLevel` is negative, suppress line breaks and format the
1453 /// entire output on one line. If `stream` is initially invalid, this
1454 /// operation has no effect. Note that a trailing newline is provided
1455 /// in multiline mode only.
1456 bsl::ostream& print(bsl::ostream& stream,
1457 int level = 0,
1458 int spacesPerLevel = 4) const;
1459
1460 /// Return the id of the current selection if the selection is defined,
1461 /// and -1 otherwise.
1462 int selectionId() const;
1463
1464 /// Invoke the specified `accessor` on the non-modifiable selection,
1465 /// supplying `accessor` with the corresponding selection information
1466 /// structure. Return the value returned from the invocation of
1467 /// `accessor` if this object has a defined selection, and -1 otherwise.
1468 template<class ACCESSOR>
1469 int accessSelection(ACCESSOR& accessor) const;
1470
1471 /// Return a reference to the non-modifiable "Selection1" selection of
1472 /// this object if "Selection1" is the current selection. The behavior
1473 /// is undefined unless "Selection1" is the selection of this object.
1474 const int& selection1() const;
1475
1476 /// Return a reference to the non-modifiable "Selection2" selection of
1477 /// this object if "Selection2" is the current selection. The behavior
1478 /// is undefined unless "Selection2" is the selection of this object.
1479 const double& selection2() const;
1480
1481 /// Return a reference to the non-modifiable "Selection3" selection of
1482 /// this object if "Selection3" is the current selection. The behavior
1483 /// is undefined unless "Selection3" is the selection of this object.
1484 const Sequence4& selection3() const;
1485
1486 /// Return a reference to the non-modifiable "Selection4" selection of
1487 /// this object if "Selection4" is the current selection. The behavior
1488 /// is undefined unless "Selection4" is the selection of this object.
1489 const Choice2& selection4() const;
1490
1491 /// Return `true` if the value of this object is a "Selection1" value,
1492 /// and return `false` otherwise.
1493 bool isSelection1Value() const;
1494
1495 /// Return `true` if the value of this object is a "Selection2" value,
1496 /// and return `false` otherwise.
1497 bool isSelection2Value() const;
1498
1499 /// Return `true` if the value of this object is a "Selection3" value,
1500 /// and return `false` otherwise.
1501 bool isSelection3Value() const;
1502
1503 /// Return `true` if the value of this object is a "Selection4" value,
1504 /// and return `false` otherwise.
1505 bool isSelection4Value() const;
1506
1507 /// Return `true` if the value of this object is undefined, and `false`
1508 /// otherwise.
1509 bool isUndefinedValue() const;
1510
1511 /// Return the symbolic name of the current selection of this object.
1512 const char *selectionName() const;
1513};
1514
1515// FREE OPERATORS
1516
1517/// Return `true` if the specified `lhs` and `rhs` objects have the same
1518/// value, and `false` otherwise. Two `Choice1` objects have the same
1519/// value if either the selections in both objects have the same ids and
1520/// the same values, or both selections are undefined.
1521inline
1522bool operator==(const Choice1& lhs, const Choice1& rhs);
1523
1524/// Return `true` if the specified `lhs` and `rhs` objects do not have the
1525/// same values, as determined by `operator==`, and `false` otherwise.
1526inline
1527bool operator!=(const Choice1& lhs, const Choice1& rhs);
1528
1529/// Format the specified `rhs` to the specified output `stream` and
1530/// return a reference to the modifiable `stream`.
1531inline
1532bsl::ostream& operator<<(bsl::ostream& stream, const Choice1& rhs);
1533
1534} // close package namespace
1535
1536// TRAITS
1537
1539
1540namespace s_baltst {
1541
1542 // =============
1543 // class Choice2
1544 // =============
1545
1546class Choice2 {
1547
1548 // INSTANCE DATA
1549 union {
1554 };
1555
1556 int d_selectionId;
1557 bslma::Allocator *d_allocator_p;
1558
1559 public:
1560 // TYPES
1561
1562 enum {
1569
1570 enum {
1571 NUM_SELECTIONS = 4
1573
1574 enum {
1580
1581 // CONSTANTS
1582 static const char CLASS_NAME[];
1583
1585
1586 // CLASS METHODS
1587
1588 /// Return selection information for the selection indicated by the
1589 /// specified `id` if the selection exists, and 0 otherwise.
1591
1592 /// Return selection information for the selection indicated by the
1593 /// specified `name` of the specified `nameLength` if the selection
1594 /// exists, and 0 otherwise.
1596 const char *name,
1597 int nameLength);
1598
1599 // CREATORS
1600
1601 /// Create an object of type `Choice2` having the default value. Use
1602 /// the optionally specified `basicAllocator` to supply memory. If
1603 /// `basicAllocator` is 0, the currently installed default allocator is
1604 /// used.
1605 explicit Choice2(bslma::Allocator *basicAllocator = 0);
1606
1607 /// Create an object of type `Choice2` having the value of the specified
1608 /// `original` object. Use the optionally specified `basicAllocator` to
1609 /// supply memory. If `basicAllocator` is 0, the currently installed
1610 /// default allocator is used.
1611 Choice2(const Choice2& original,
1612 bslma::Allocator *basicAllocator = 0);
1613
1614#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1615 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1616 /// Create an object of type `Choice2` having the value of the specified
1617 /// `original` object. After performing this action, the `original`
1618 /// object will be left in a valid, but unspecified state.
1619 Choice2(Choice2&& original) noexcept;
1620
1621 /// Create an object of type `Choice2` having the value of the specified
1622 /// `original` object. After performing this action, the `original`
1623 /// object will be left in a valid, but unspecified state. Use the
1624 /// optionally specified `basicAllocator` to supply memory. If
1625 /// `basicAllocator` is 0, the currently installed default allocator is
1626 /// used.
1627 Choice2(Choice2&& original,
1628 bslma::Allocator *basicAllocator);
1629#endif
1630
1631 /// Destroy this object.
1632 ~Choice2();
1633
1634 // MANIPULATORS
1635
1636 /// Assign to this object the value of the specified `rhs` object.
1638
1639#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1640 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1641 /// Assign to this object the value of the specified `rhs` object.
1642 /// After performing this action, the `rhs` object will be left in a
1643 /// valid, but unspecified state.
1644 Choice2& operator=(Choice2&& rhs);
1645#endif
1646
1647 /// Reset this object to the default value (i.e., its value upon default
1648 /// construction).
1649 void reset();
1650
1651 /// Set the value of this object to be the default for the selection
1652 /// indicated by the specified `selectionId`. Return 0 on success, and
1653 /// non-zero value otherwise (i.e., the selection is not found).
1655
1656 /// Set the value of this object to be the default for the selection
1657 /// indicated by the specified `name` of the specified `nameLength`.
1658 /// Return 0 on success, and non-zero value otherwise (i.e., the
1659 /// selection is not found).
1660 int makeSelection(const char *name, int nameLength);
1661
1662 /// Set the value of this object to be a "Selection1" value. Optionally
1663 /// specify the `value` of the "Selection1". If `value` is not
1664 /// specified, the default "Selection1" value is used.
1666 bool& makeSelection1(bool value);
1667
1670#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1671 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1673#endif
1674 // Set the value of this object to be a "Selection2" value. Optionally
1675 // specify the 'value' of the "Selection2". If 'value' is not
1676 // specified, the default "Selection2" value is used.
1677
1680#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1681 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1682 Choice1& makeSelection3(Choice1&& value);
1683#endif
1684 // Set the value of this object to be a "Selection3" value. Optionally
1685 // specify the 'value' of the "Selection3". If 'value' is not
1686 // specified, the default "Selection3" value is used.
1687
1688 /// Set the value of this object to be a "Selection4" value. Optionally
1689 /// specify the `value` of the "Selection4". If `value` is not
1690 /// specified, the default "Selection4" value is used.
1691 unsigned int& makeSelection4();
1692 unsigned int& makeSelection4(unsigned int value);
1693
1694 /// Invoke the specified `manipulator` on the address of the modifiable
1695 /// selection, supplying `manipulator` with the corresponding selection
1696 /// information structure. Return the value returned from the
1697 /// invocation of `manipulator` if this object has a defined selection,
1698 /// and -1 otherwise.
1699 template<class MANIPULATOR>
1700 int manipulateSelection(MANIPULATOR& manipulator);
1701
1702 /// Return a reference to the modifiable "Selection1" selection of this
1703 /// object if "Selection1" is the current selection. The behavior is
1704 /// undefined unless "Selection1" is the selection of this object.
1705 bool& selection1();
1706
1707 /// Return a reference to the modifiable "Selection2" selection of this
1708 /// object if "Selection2" is the current selection. The behavior is
1709 /// undefined unless "Selection2" is the selection of this object.
1711
1712 /// Return a reference to the modifiable "Selection3" selection of this
1713 /// object if "Selection3" is the current selection. The behavior is
1714 /// undefined unless "Selection3" is the selection of this object.
1716
1717 /// Return a reference to the modifiable "Selection4" selection of this
1718 /// object if "Selection4" is the current selection. The behavior is
1719 /// undefined unless "Selection4" is the selection of this object.
1720 unsigned int& selection4();
1721
1722 // ACCESSORS
1723
1724 /// Format this object to the specified output `stream` at the
1725 /// optionally specified indentation `level` and return a reference to
1726 /// the modifiable `stream`. If `level` is specified, optionally
1727 /// specify `spacesPerLevel`, the number of spaces per indentation level
1728 /// for this and all of its nested objects. Each line is indented by
1729 /// the absolute value of `level * spacesPerLevel`. If `level` is
1730 /// negative, suppress indentation of the first line. If
1731 /// `spacesPerLevel` is negative, suppress line breaks and format the
1732 /// entire output on one line. If `stream` is initially invalid, this
1733 /// operation has no effect. Note that a trailing newline is provided
1734 /// in multiline mode only.
1735 bsl::ostream& print(bsl::ostream& stream,
1736 int level = 0,
1737 int spacesPerLevel = 4) const;
1738
1739 /// Return the id of the current selection if the selection is defined,
1740 /// and -1 otherwise.
1741 int selectionId() const;
1742
1743 /// Invoke the specified `accessor` on the non-modifiable selection,
1744 /// supplying `accessor` with the corresponding selection information
1745 /// structure. Return the value returned from the invocation of
1746 /// `accessor` if this object has a defined selection, and -1 otherwise.
1747 template<class ACCESSOR>
1748 int accessSelection(ACCESSOR& accessor) const;
1749
1750 /// Return a reference to the non-modifiable "Selection1" selection of
1751 /// this object if "Selection1" is the current selection. The behavior
1752 /// is undefined unless "Selection1" is the selection of this object.
1753 const bool& selection1() const;
1754
1755 /// Return a reference to the non-modifiable "Selection2" selection of
1756 /// this object if "Selection2" is the current selection. The behavior
1757 /// is undefined unless "Selection2" is the selection of this object.
1758 const bsl::string& selection2() const;
1759
1760 /// Return a reference to the non-modifiable "Selection3" selection of
1761 /// this object if "Selection3" is the current selection. The behavior
1762 /// is undefined unless "Selection3" is the selection of this object.
1763 const Choice1& selection3() const;
1764
1765 /// Return a reference to the non-modifiable "Selection4" selection of
1766 /// this object if "Selection4" is the current selection. The behavior
1767 /// is undefined unless "Selection4" is the selection of this object.
1768 const unsigned int& selection4() const;
1769
1770 /// Return `true` if the value of this object is a "Selection1" value,
1771 /// and return `false` otherwise.
1772 bool isSelection1Value() const;
1773
1774 /// Return `true` if the value of this object is a "Selection2" value,
1775 /// and return `false` otherwise.
1776 bool isSelection2Value() const;
1777
1778 /// Return `true` if the value of this object is a "Selection3" value,
1779 /// and return `false` otherwise.
1780 bool isSelection3Value() const;
1781
1782 /// Return `true` if the value of this object is a "Selection4" value,
1783 /// and return `false` otherwise.
1784 bool isSelection4Value() const;
1785
1786 /// Return `true` if the value of this object is undefined, and `false`
1787 /// otherwise.
1788 bool isUndefinedValue() const;
1789
1790 /// Return the symbolic name of the current selection of this object.
1791 const char *selectionName() const;
1792};
1793
1794// FREE OPERATORS
1795
1796/// Return `true` if the specified `lhs` and `rhs` objects have the same
1797/// value, and `false` otherwise. Two `Choice2` objects have the same
1798/// value if either the selections in both objects have the same ids and
1799/// the same values, or both selections are undefined.
1800inline
1801bool operator==(const Choice2& lhs, const Choice2& rhs);
1802
1803/// Return `true` if the specified `lhs` and `rhs` objects do not have the
1804/// same values, as determined by `operator==`, and `false` otherwise.
1805inline
1806bool operator!=(const Choice2& lhs, const Choice2& rhs);
1807
1808/// Format the specified `rhs` to the specified output `stream` and
1809/// return a reference to the modifiable `stream`.
1810inline
1811bsl::ostream& operator<<(bsl::ostream& stream, const Choice2& rhs);
1812
1813} // close package namespace
1814
1815// TRAITS
1816
1818
1819namespace s_baltst {
1820
1821 // ===============
1822 // class Sequence4
1823 // ===============
1824
1826
1827 // INSTANCE DATA
1828 double d_element10;
1830 bsl::vector<int> d_element17;
1831 bsl::vector<double> d_element15;
1832 bsl::vector<char> d_element11;
1833 bsl::vector<bool> d_element14;
1835 bsl::vector<Sequence3> d_element1;
1836 bsl::vector<Choice1> d_element2;
1837 bsl::string d_element9;
1842 s_baltst::Enumerated::Value d_element13;
1843 int d_element12;
1845 bdlb::NullableValue<int> d_element4;
1846 bool d_element8;
1847
1848 public:
1849 // TYPES
1850 enum {
1871
1872 enum {
1873 NUM_ATTRIBUTES = 19
1875
1876 enum {
1897
1898 // CONSTANTS
1899 static const char CLASS_NAME[];
1900
1902
1903 public:
1904 // CLASS METHODS
1905
1906 /// Return attribute information for the attribute indicated by the
1907 /// specified `id` if the attribute exists, and 0 otherwise.
1909
1910 /// Return attribute information for the attribute indicated by the
1911 /// specified `name` of the specified `nameLength` if the attribute
1912 /// exists, and 0 otherwise.
1914 const char *name,
1915 int nameLength);
1916
1917 // CREATORS
1918
1919 /// Create an object of type `Sequence4` having the default value. Use
1920 /// the optionally specified `basicAllocator` to supply memory. If
1921 /// `basicAllocator` is 0, the currently installed default allocator is
1922 /// used.
1923 explicit Sequence4(bslma::Allocator *basicAllocator = 0);
1924
1925 /// Create an object of type `Sequence4` having the value of the
1926 /// specified `original` object. Use the optionally specified
1927 /// `basicAllocator` to supply memory. If `basicAllocator` is 0, the
1928 /// currently installed default allocator is used.
1929 Sequence4(const Sequence4& original,
1930 bslma::Allocator *basicAllocator = 0);
1931
1932#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1933 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1934 /// Create an object of type `Sequence4` having the value of the
1935 /// specified `original` object. After performing this action, the
1936 /// `original` object will be left in a valid, but unspecified state.
1937 Sequence4(Sequence4&& original) noexcept;
1938
1939 /// Create an object of type `Sequence4` having the value of the
1940 /// specified `original` object. After performing this action, the
1941 /// `original` object will be left in a valid, but unspecified state.
1942 /// Use the optionally specified `basicAllocator` to supply memory. If
1943 /// `basicAllocator` is 0, the currently installed default allocator is
1944 /// used.
1945 Sequence4(Sequence4&& original,
1946 bslma::Allocator *basicAllocator);
1947#endif
1948
1949 /// Destroy this object.
1951
1952 // MANIPULATORS
1953
1954 /// Assign to this object the value of the specified `rhs` object.
1956
1957#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1958 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
1959 /// Assign to this object the value of the specified `rhs` object.
1960 /// After performing this action, the `rhs` object will be left in a
1961 /// valid, but unspecified state.
1963#endif
1964
1965 /// Reset this object to the default value (i.e., its value upon
1966 /// default construction).
1967 void reset();
1968
1969 /// Invoke the specified `manipulator` sequentially on the address of
1970 /// each (modifiable) attribute of this object, supplying `manipulator`
1971 /// with the corresponding attribute information structure until such
1972 /// invocation returns a non-zero value. Return the value from the
1973 /// last invocation of `manipulator` (i.e., the invocation that
1974 /// terminated the sequence).
1975 template<class MANIPULATOR>
1976 int manipulateAttributes(MANIPULATOR& manipulator);
1977
1978 /// Invoke the specified `manipulator` on the address of
1979 /// the (modifiable) attribute indicated by the specified `id`,
1980 /// supplying `manipulator` with the corresponding attribute
1981 /// information structure. Return the value returned from the
1982 /// invocation of `manipulator` if `id` identifies an attribute of this
1983 /// class, and -1 otherwise.
1984 template<class MANIPULATOR>
1985 int manipulateAttribute(MANIPULATOR& manipulator, int id);
1986
1987 /// Invoke the specified `manipulator` on the address of
1988 /// the (modifiable) attribute indicated by the specified `name` of the
1989 /// specified `nameLength`, supplying `manipulator` with the
1990 /// corresponding attribute information structure. Return the value
1991 /// returned from the invocation of `manipulator` if `name` identifies
1992 /// an attribute of this class, and -1 otherwise.
1993 template<class MANIPULATOR>
1994 int manipulateAttribute(MANIPULATOR& manipulator,
1995 const char *name,
1996 int nameLength);
1997
1998 /// Return a reference to the modifiable "Element1" attribute of this
1999 /// object.
2001
2002 /// Return a reference to the modifiable "Element2" attribute of this
2003 /// object.
2005
2006 /// Return a reference to the modifiable "Element3" attribute of this
2007 /// object.
2009
2010 /// Return a reference to the modifiable "Element4" attribute of this
2011 /// object.
2013
2014 /// Return a reference to the modifiable "Element5" attribute of this
2015 /// object.
2017
2018 /// Return a reference to the modifiable "Element6" attribute of this
2019 /// object.
2021
2022 /// Return a reference to the modifiable "Element7" attribute of this
2023 /// object.
2025
2026 /// Return a reference to the modifiable "Element8" attribute of this
2027 /// object.
2028 bool& element8();
2029
2030 /// Return a reference to the modifiable "Element9" attribute of this
2031 /// object.
2033
2034 /// Return a reference to the modifiable "Element10" attribute of this
2035 /// object.
2036 double& element10();
2037
2038 /// Return a reference to the modifiable "Element11" attribute of this
2039 /// object.
2041
2042 /// Return a reference to the modifiable "Element12" attribute of this
2043 /// object.
2044 int& element12();
2045
2046 /// Return a reference to the modifiable "Element13" attribute of this
2047 /// object.
2049
2050 /// Return a reference to the modifiable "Element14" attribute of this
2051 /// object.
2053
2054 /// Return a reference to the modifiable "Element15" attribute of this
2055 /// object.
2057
2058 /// Return a reference to the modifiable "Element16" attribute of this
2059 /// object.
2061
2062 /// Return a reference to the modifiable "Element17" attribute of this
2063 /// object.
2065
2066 /// Return a reference to the modifiable "Element18" attribute of this
2067 /// object.
2069
2070 /// Return a reference to the modifiable "Element19" attribute of this
2071 /// object.
2073
2074 // ACCESSORS
2075
2076 /// Format this object to the specified output `stream` at the
2077 /// optionally specified indentation `level` and return a reference to
2078 /// the modifiable `stream`. If `level` is specified, optionally
2079 /// specify `spacesPerLevel`, the number of spaces per indentation level
2080 /// for this and all of its nested objects. Each line is indented by
2081 /// the absolute value of `level * spacesPerLevel`. If `level` is
2082 /// negative, suppress indentation of the first line. If
2083 /// `spacesPerLevel` is negative, suppress line breaks and format the
2084 /// entire output on one line. If `stream` is initially invalid, this
2085 /// operation has no effect. Note that a trailing newline is provided
2086 /// in multiline mode only.
2087 bsl::ostream& print(bsl::ostream& stream,
2088 int level = 0,
2089 int spacesPerLevel = 4) const;
2090
2091 /// Invoke the specified `accessor` sequentially on each
2092 /// (non-modifiable) attribute of this object, supplying `accessor`
2093 /// with the corresponding attribute information structure until such
2094 /// invocation returns a non-zero value. Return the value from the
2095 /// last invocation of `accessor` (i.e., the invocation that terminated
2096 /// the sequence).
2097 template<class ACCESSOR>
2098 int accessAttributes(ACCESSOR& accessor) const;
2099
2100 /// Invoke the specified `accessor` on the (non-modifiable) attribute
2101 /// of this object indicated by the specified `id`, supplying `accessor`
2102 /// with the corresponding attribute information structure. Return the
2103 /// value returned from the invocation of `accessor` if `id` identifies
2104 /// an attribute of this class, and -1 otherwise.
2105 template<class ACCESSOR>
2106 int accessAttribute(ACCESSOR& accessor, int id) const;
2107
2108 /// Invoke the specified `accessor` on the (non-modifiable) attribute
2109 /// of this object indicated by the specified `name` of the specified
2110 /// `nameLength`, supplying `accessor` with the corresponding attribute
2111 /// information structure. Return the value returned from the
2112 /// invocation of `accessor` if `name` identifies an attribute of this
2113 /// class, and -1 otherwise.
2114 template<class ACCESSOR>
2115 int accessAttribute(ACCESSOR& accessor,
2116 const char *name,
2117 int nameLength) const;
2118
2119 /// Return a reference offering non-modifiable access to the "Element1"
2120 /// attribute of this object.
2121 const bsl::vector<Sequence3>& element1() const;
2122
2123 /// Return a reference offering non-modifiable access to the "Element2"
2124 /// attribute of this object.
2125 const bsl::vector<Choice1>& element2() const;
2126
2127 /// Return a reference offering non-modifiable access to the "Element3"
2128 /// attribute of this object.
2130
2131 /// Return a reference offering non-modifiable access to the "Element4"
2132 /// attribute of this object.
2133 const bdlb::NullableValue<int>& element4() const;
2134
2135 /// Return a reference offering non-modifiable access to the "Element5"
2136 /// attribute of this object.
2138
2139 /// Return a reference offering non-modifiable access to the "Element6"
2140 /// attribute of this object.
2142
2143 /// Return a reference offering non-modifiable access to the "Element7"
2144 /// attribute of this object.
2146
2147 /// Return the value of the "Element8" attribute of this object.
2148 bool element8() const;
2149
2150 /// Return a reference offering non-modifiable access to the "Element9"
2151 /// attribute of this object.
2152 const bsl::string& element9() const;
2153
2154 /// Return the value of the "Element10" attribute of this object.
2155 double element10() const;
2156
2157 /// Return a reference offering non-modifiable access to the "Element11"
2158 /// attribute of this object.
2159 const bsl::vector<char>& element11() const;
2160
2161 /// Return the value of the "Element12" attribute of this object.
2162 int element12() const;
2163
2164 /// Return the value of the "Element13" attribute of this object.
2166
2167 /// Return a reference offering non-modifiable access to the "Element14"
2168 /// attribute of this object.
2169 const bsl::vector<bool>& element14() const;
2170
2171 /// Return a reference offering non-modifiable access to the "Element15"
2172 /// attribute of this object.
2173 const bsl::vector<double>& element15() const;
2174
2175 /// Return a reference offering non-modifiable access to the "Element16"
2176 /// attribute of this object.
2178
2179 /// Return a reference offering non-modifiable access to the "Element17"
2180 /// attribute of this object.
2181 const bsl::vector<int>& element17() const;
2182
2183 /// Return a reference offering non-modifiable access to the "Element18"
2184 /// attribute of this object.
2186
2187 /// Return a reference offering non-modifiable access to the "Element19"
2188 /// attribute of this object.
2190};
2191
2192// FREE OPERATORS
2193
2194/// Return `true` if the specified `lhs` and `rhs` attribute objects have
2195/// the same value, and `false` otherwise. Two attribute objects have the
2196/// same value if each respective attribute has the same value.
2197inline
2198bool operator==(const Sequence4& lhs, const Sequence4& rhs);
2199
2200/// Return `true` if the specified `lhs` and `rhs` attribute objects do not
2201/// have the same value, and `false` otherwise. Two attribute objects do
2202/// not have the same value if one or more respective attributes differ in
2203/// values.
2204inline
2205bool operator!=(const Sequence4& lhs, const Sequence4& rhs);
2206
2207/// Format the specified `rhs` to the specified output `stream` and
2208/// return a reference to the modifiable `stream`.
2209inline
2210bsl::ostream& operator<<(bsl::ostream& stream, const Sequence4& rhs);
2211
2212} // close package namespace
2213
2214// TRAITS
2215
2217
2218namespace s_baltst {
2219
2220 // ===============
2221 // class Sequence1
2222 // ===============
2223
2225
2226 // INSTANCE DATA
2227 bslma::Allocator *d_allocator_p;
2229 bsl::vector<Choice3> d_element5;
2230 bsl::vector<Choice1> d_element2;
2232 Choice2 *d_element3;
2233
2234 public:
2235 // TYPES
2236 enum {
2243
2244 enum {
2245 NUM_ATTRIBUTES = 5
2247
2248 enum {
2255
2256 // CONSTANTS
2257 static const char CLASS_NAME[];
2258
2260
2261 public:
2262 // CLASS METHODS
2263
2264 /// Return attribute information for the attribute indicated by the
2265 /// specified `id` if the attribute exists, and 0 otherwise.
2267
2268 /// Return attribute information for the attribute indicated by the
2269 /// specified `name` of the specified `nameLength` if the attribute
2270 /// exists, and 0 otherwise.
2272 const char *name,
2273 int nameLength);
2274
2275 // CREATORS
2276
2277 /// Create an object of type `Sequence1` having the default value. Use
2278 /// the optionally specified `basicAllocator` to supply memory. If
2279 /// `basicAllocator` is 0, the currently installed default allocator is
2280 /// used.
2281 explicit Sequence1(bslma::Allocator *basicAllocator = 0);
2282
2283 /// Create an object of type `Sequence1` having the value of the
2284 /// specified `original` object. Use the optionally specified
2285 /// `basicAllocator` to supply memory. If `basicAllocator` is 0, the
2286 /// currently installed default allocator is used.
2287 Sequence1(const Sequence1& original,
2288 bslma::Allocator *basicAllocator = 0);
2289
2290#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
2291 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
2292 /// Create an object of type `Sequence1` having the value of the
2293 /// specified `original` object. After performing this action, the
2294 /// `original` object will be left in a valid, but unspecified state.
2295 Sequence1(Sequence1&& original) noexcept;
2296
2297 /// Create an object of type `Sequence1` having the value of the
2298 /// specified `original` object. After performing this action, the
2299 /// `original` object will be left in a valid, but unspecified state.
2300 /// Use the optionally specified `basicAllocator` to supply memory. If
2301 /// `basicAllocator` is 0, the currently installed default allocator is
2302 /// used.
2303 Sequence1(Sequence1&& original,
2304 bslma::Allocator *basicAllocator);
2305#endif
2306
2307 /// Destroy this object.
2309
2310 // MANIPULATORS
2311
2312 /// Assign to this object the value of the specified `rhs` object.
2314
2315#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
2316 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
2317 /// Assign to this object the value of the specified `rhs` object.
2318 /// After performing this action, the `rhs` object will be left in a
2319 /// valid, but unspecified state.
2321#endif
2322
2323 /// Reset this object to the default value (i.e., its value upon
2324 /// default construction).
2325 void reset();
2326
2327 /// Invoke the specified `manipulator` sequentially on the address of
2328 /// each (modifiable) attribute of this object, supplying `manipulator`
2329 /// with the corresponding attribute information structure until such
2330 /// invocation returns a non-zero value. Return the value from the
2331 /// last invocation of `manipulator` (i.e., the invocation that
2332 /// terminated the sequence).
2333 template<class MANIPULATOR>
2334 int manipulateAttributes(MANIPULATOR& manipulator);
2335
2336 /// Invoke the specified `manipulator` on the address of
2337 /// the (modifiable) attribute indicated by the specified `id`,
2338 /// supplying `manipulator` with the corresponding attribute
2339 /// information structure. Return the value returned from the
2340 /// invocation of `manipulator` if `id` identifies an attribute of this
2341 /// class, and -1 otherwise.
2342 template<class MANIPULATOR>
2343 int manipulateAttribute(MANIPULATOR& manipulator, int id);
2344
2345 /// Invoke the specified `manipulator` on the address of
2346 /// the (modifiable) attribute indicated by the specified `name` of the
2347 /// specified `nameLength`, supplying `manipulator` with the
2348 /// corresponding attribute information structure. Return the value
2349 /// returned from the invocation of `manipulator` if `name` identifies
2350 /// an attribute of this class, and -1 otherwise.
2351 template<class MANIPULATOR>
2352 int manipulateAttribute(MANIPULATOR& manipulator,
2353 const char *name,
2354 int nameLength);
2355
2356 /// Return a reference to the modifiable "Element1" attribute of this
2357 /// object.
2359
2360 /// Return a reference to the modifiable "Element2" attribute of this
2361 /// object.
2363
2364 /// Return a reference to the modifiable "Element3" attribute of this
2365 /// object.
2366 Choice2& element3();
2367
2368 /// Return a reference to the modifiable "Element4" attribute of this
2369 /// object.
2371
2372 /// Return a reference to the modifiable "Element5" attribute of this
2373 /// object.
2375
2376 // ACCESSORS
2377
2378 /// Format this object to the specified output `stream` at the
2379 /// optionally specified indentation `level` and return a reference to
2380 /// the modifiable `stream`. If `level` is specified, optionally
2381 /// specify `spacesPerLevel`, the number of spaces per indentation level
2382 /// for this and all of its nested objects. Each line is indented by
2383 /// the absolute value of `level * spacesPerLevel`. If `level` is
2384 /// negative, suppress indentation of the first line. If
2385 /// `spacesPerLevel` is negative, suppress line breaks and format the
2386 /// entire output on one line. If `stream` is initially invalid, this
2387 /// operation has no effect. Note that a trailing newline is provided
2388 /// in multiline mode only.
2389 bsl::ostream& print(bsl::ostream& stream,
2390 int level = 0,
2391 int spacesPerLevel = 4) const;
2392
2393 /// Invoke the specified `accessor` sequentially on each
2394 /// (non-modifiable) attribute of this object, supplying `accessor`
2395 /// with the corresponding attribute information structure until such
2396 /// invocation returns a non-zero value. Return the value from the
2397 /// last invocation of `accessor` (i.e., the invocation that terminated
2398 /// the sequence).
2399 template<class ACCESSOR>
2400 int accessAttributes(ACCESSOR& accessor) const;
2401
2402 /// Invoke the specified `accessor` on the (non-modifiable) attribute
2403 /// of this object indicated by the specified `id`, supplying `accessor`
2404 /// with the corresponding attribute information structure. Return the
2405 /// value returned from the invocation of `accessor` if `id` identifies
2406 /// an attribute of this class, and -1 otherwise.
2407 template<class ACCESSOR>
2408 int accessAttribute(ACCESSOR& accessor, int id) const;
2409
2410 /// Invoke the specified `accessor` on the (non-modifiable) attribute
2411 /// of this object indicated by the specified `name` of the specified
2412 /// `nameLength`, supplying `accessor` with the corresponding attribute
2413 /// information structure. Return the value returned from the
2414 /// invocation of `accessor` if `name` identifies an attribute of this
2415 /// class, and -1 otherwise.
2416 template<class ACCESSOR>
2417 int accessAttribute(ACCESSOR& accessor,
2418 const char *name,
2419 int nameLength) const;
2420
2421 /// Return a reference offering non-modifiable access to the "Element1"
2422 /// attribute of this object.
2424
2425 /// Return a reference offering non-modifiable access to the "Element2"
2426 /// attribute of this object.
2427 const bsl::vector<Choice1>& element2() const;
2428
2429 /// Return a reference offering non-modifiable access to the "Element3"
2430 /// attribute of this object.
2431 const Choice2& element3() const;
2432
2433 /// Return a reference offering non-modifiable access to the "Element4"
2434 /// attribute of this object.
2436
2437 /// Return a reference offering non-modifiable access to the "Element5"
2438 /// attribute of this object.
2439 const bsl::vector<Choice3>& element5() const;
2440};
2441
2442// FREE OPERATORS
2443
2444/// Return `true` if the specified `lhs` and `rhs` attribute objects have
2445/// the same value, and `false` otherwise. Two attribute objects have the
2446/// same value if each respective attribute has the same value.
2447inline
2448bool operator==(const Sequence1& lhs, const Sequence1& rhs);
2449
2450/// Return `true` if the specified `lhs` and `rhs` attribute objects do not
2451/// have the same value, and `false` otherwise. Two attribute objects do
2452/// not have the same value if one or more respective attributes differ in
2453/// values.
2454inline
2455bool operator!=(const Sequence1& lhs, const Sequence1& rhs);
2456
2457/// Format the specified `rhs` to the specified output `stream` and
2458/// return a reference to the modifiable `stream`.
2459inline
2460bsl::ostream& operator<<(bsl::ostream& stream, const Sequence1& rhs);
2461
2462} // close package namespace
2463
2464// TRAITS
2465
2467
2468namespace s_baltst {
2469
2470 // ===============
2471 // class Sequence2
2472 // ===============
2473
2475
2476 // INSTANCE DATA
2477 s_baltst::CustomString d_element1;
2480 bdlt::DatetimeTz d_element3;
2481 bdlb::NullableValue<double> d_element5;
2483 unsigned char d_element2;
2484
2485 public:
2486 // TYPES
2487 enum {
2496
2497 enum {
2498 NUM_ATTRIBUTES = 7
2500
2501 enum {
2510
2511 // CONSTANTS
2512 static const char CLASS_NAME[];
2513
2515
2516 public:
2517 // CLASS METHODS
2518
2519 /// Return attribute information for the attribute indicated by the
2520 /// specified `id` if the attribute exists, and 0 otherwise.
2522
2523 /// Return attribute information for the attribute indicated by the
2524 /// specified `name` of the specified `nameLength` if the attribute
2525 /// exists, and 0 otherwise.
2527 const char *name,
2528 int nameLength);
2529
2530 // CREATORS
2531
2532 /// Create an object of type `Sequence2` having the default value. Use
2533 /// the optionally specified `basicAllocator` to supply memory. If
2534 /// `basicAllocator` is 0, the currently installed default allocator is
2535 /// used.
2536 explicit Sequence2(bslma::Allocator *basicAllocator = 0);
2537
2538 /// Create an object of type `Sequence2` having the value of the
2539 /// specified `original` object. Use the optionally specified
2540 /// `basicAllocator` to supply memory. If `basicAllocator` is 0, the
2541 /// currently installed default allocator is used.
2542 Sequence2(const Sequence2& original,
2543 bslma::Allocator *basicAllocator = 0);
2544
2545#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
2546 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
2547 /// Create an object of type `Sequence2` having the value of the
2548 /// specified `original` object. After performing this action, the
2549 /// `original` object will be left in a valid, but unspecified state.
2550 Sequence2(Sequence2&& original) noexcept;
2551
2552 /// Create an object of type `Sequence2` having the value of the
2553 /// specified `original` object. After performing this action, the
2554 /// `original` object will be left in a valid, but unspecified state.
2555 /// Use the optionally specified `basicAllocator` to supply memory. If
2556 /// `basicAllocator` is 0, the currently installed default allocator is
2557 /// used.
2558 Sequence2(Sequence2&& original,
2559 bslma::Allocator *basicAllocator);
2560#endif
2561
2562 /// Destroy this object.
2564
2565 // MANIPULATORS
2566
2567 /// Assign to this object the value of the specified `rhs` object.
2569
2570#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
2571 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT)
2572 /// Assign to this object the value of the specified `rhs` object.
2573 /// After performing this action, the `rhs` object will be left in a
2574 /// valid, but unspecified state.
2576#endif
2577
2578 /// Reset this object to the default value (i.e., its value upon
2579 /// default construction).
2580 void reset();
2581
2582 /// Invoke the specified `manipulator` sequentially on the address of
2583 /// each (modifiable) attribute of this object, supplying `manipulator`
2584 /// with the corresponding attribute information structure until such
2585 /// invocation returns a non-zero value. Return the value from the
2586 /// last invocation of `manipulator` (i.e., the invocation that
2587 /// terminated the sequence).
2588 template<class MANIPULATOR>
2589 int manipulateAttributes(MANIPULATOR& manipulator);
2590
2591 /// Invoke the specified `manipulator` on the address of
2592 /// the (modifiable) attribute indicated by the specified `id`,
2593 /// supplying `manipulator` with the corresponding attribute
2594 /// information structure. Return the value returned from the
2595 /// invocation of `manipulator` if `id` identifies an attribute of this
2596 /// class, and -1 otherwise.
2597 template<class MANIPULATOR>
2598 int manipulateAttribute(MANIPULATOR& manipulator, int id);
2599
2600 /// Invoke the specified `manipulator` on the address of
2601 /// the (modifiable) attribute indicated by the specified `name` of the
2602 /// specified `nameLength`, supplying `manipulator` with the
2603 /// corresponding attribute information structure. Return the value
2604 /// returned from the invocation of `manipulator` if `name` identifies
2605 /// an attribute of this class, and -1 otherwise.
2606 template<class MANIPULATOR>
2607 int manipulateAttribute(MANIPULATOR& manipulator,
2608 const char *name,
2609 int nameLength);
2610
2611 /// Return a reference to the modifiable "Element1" attribute of this
2612 /// object.
2614
2615 /// Return a reference to the modifiable "Element2" attribute of this
2616 /// object.
2617 unsigned char& element2();
2618
2619 /// Return a reference to the modifiable "Element3" attribute of this
2620 /// object.
2622
2623 /// Return a reference to the modifiable "Element4" attribute of this
2624 /// object.
2626
2627 /// Return a reference to the modifiable "Element5" attribute of this
2628 /// object.
2630
2631 /// Return a reference to the modifiable "Element6" attribute of this
2632 /// object.
2634
2635 /// Return a reference to the modifiable "Element7" attribute of this
2636 /// object.
2638
2639 // ACCESSORS
2640
2641 /// Format this object to the specified output `stream` at the
2642 /// optionally specified indentation `level` and return a reference to
2643 /// the modifiable `stream`. If `level` is specified, optionally
2644 /// specify `spacesPerLevel`, the number of spaces per indentation level
2645 /// for this and all of its nested objects. Each line is indented by
2646 /// the absolute value of `level * spacesPerLevel`. If `level` is
2647 /// negative, suppress indentation of the first line. If
2648 /// `spacesPerLevel` is negative, suppress line breaks and format the
2649 /// entire output on one line. If `stream` is initially invalid, this
2650 /// operation has no effect. Note that a trailing newline is provided
2651 /// in multiline mode only.
2652 bsl::ostream& print(bsl::ostream& stream,
2653 int level = 0,
2654 int spacesPerLevel = 4) const;
2655
2656 /// Invoke the specified `accessor` sequentially on each
2657 /// (non-modifiable) attribute of this object, supplying `accessor`
2658 /// with the corresponding attribute information structure until such
2659 /// invocation returns a non-zero value. Return the value from the
2660 /// last invocation of `accessor` (i.e., the invocation that terminated
2661 /// the sequence).
2662 template<class ACCESSOR>
2663 int accessAttributes(ACCESSOR& accessor) const;
2664
2665 /// Invoke the specified `accessor` on the (non-modifiable) attribute
2666 /// of this object indicated by the specified `id`, supplying `accessor`
2667 /// with the corresponding attribute information structure. Return the
2668 /// value returned from the invocation of `accessor` if `id` identifies
2669 /// an attribute of this class, and -1 otherwise.
2670 template<class ACCESSOR>
2671 int accessAttribute(ACCESSOR& accessor, int id) const;
2672
2673 /// Invoke the specified `accessor` on the (non-modifiable) attribute
2674 /// of this object indicated by the specified `name` of the specified
2675 /// `nameLength`, supplying `accessor` with the corresponding attribute
2676 /// information structure. Return the value returned from the
2677 /// invocation of `accessor` if `name` identifies an attribute of this
2678 /// class, and -1 otherwise.
2679 template<class ACCESSOR>
2680 int accessAttribute(ACCESSOR& accessor,
2681 const char *name,
2682 int nameLength) const;
2683
2684 /// Return a reference offering non-modifiable access to the "Element1"
2685 /// attribute of this object.
2686 const s_baltst::CustomString& element1() const;
2687
2688 /// Return the value of the "Element2" attribute of this object.
2689 unsigned char element2() const;
2690
2691 /// Return a reference offering non-modifiable access to the "Element3"
2692 /// attribute of this object.
2693 const bdlt::DatetimeTz& element3() const;
2694
2695 /// Return a reference offering non-modifiable access to the "Element4"
2696 /// attribute of this object.
2698
2699 /// Return a reference offering non-modifiable access to the "Element5"
2700 /// attribute of this object.
2702
2703 /// Return a reference offering non-modifiable access to the "Element6"
2704 /// attribute of this object.
2706
2707 /// Return a reference offering non-modifiable access to the "Element7"
2708 /// attribute of this object.
2710};
2711
2712// FREE OPERATORS
2713
2714/// Return `true` if the specified `lhs` and `rhs` attribute objects have
2715/// the same value, and `false` otherwise. Two attribute objects have the
2716/// same value if each respective attribute has the same value.
2717inline
2718bool operator==(const Sequence2& lhs, const Sequence2& rhs);
2719
2720/// Return `true` if the specified `lhs` and `rhs` attribute objects do not
2721/// have the same value, and `false` otherwise. Two attribute objects do
2722/// not have the same value if one or more respective attributes differ in
2723/// values.
2724inline
2725bool operator!=(const Sequence2& lhs, const Sequence2& rhs);
2726
2727/// Format the specified `rhs` to the specified output `stream` and
2728/// return a reference to the modifiable `stream`.
2729inline
2730bsl::ostream& operator<<(bsl::ostream& stream, const Sequence2& rhs);
2731
2732} // close package namespace
2733
2734// TRAITS
2735
2737
2738// ============================================================================
2739// INLINE FUNCTION DEFINITIONS
2740// ============================================================================
2741
2742namespace s_baltst {
2743
2744 // ---------------
2745 // class Sequence3
2746 // ---------------
2747
2748// CLASS METHODS
2749// MANIPULATORS
2750template <class MANIPULATOR>
2751int Sequence3::manipulateAttributes(MANIPULATOR& manipulator)
2752{
2753 int ret;
2754
2755 ret = manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
2756 if (ret) {
2757 return ret;
2758 }
2759
2760 ret = manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
2761 if (ret) {
2762 return ret;
2763 }
2764
2765 ret = manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
2766 if (ret) {
2767 return ret;
2768 }
2769
2770 ret = manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
2771 if (ret) {
2772 return ret;
2773 }
2774
2775 ret = manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
2776 if (ret) {
2777 return ret;
2778 }
2779
2780 ret = manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
2781 if (ret) {
2782 return ret;
2783 }
2784
2785 return 0;
2786}
2787
2788template <class MANIPULATOR>
2789int Sequence3::manipulateAttribute(MANIPULATOR& manipulator, int id)
2790{
2791 enum { NOT_FOUND = -1 };
2792
2793 switch (id) {
2794 case ATTRIBUTE_ID_ELEMENT1: {
2795 return manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
2796 }
2797 case ATTRIBUTE_ID_ELEMENT2: {
2798 return manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
2799 }
2800 case ATTRIBUTE_ID_ELEMENT3: {
2801 return manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
2802 }
2803 case ATTRIBUTE_ID_ELEMENT4: {
2804 return manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
2805 }
2806 case ATTRIBUTE_ID_ELEMENT5: {
2807 return manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
2808 }
2809 case ATTRIBUTE_ID_ELEMENT6: {
2810 return manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
2811 }
2812 default:
2813 return NOT_FOUND;
2814 }
2815}
2816
2817template <class MANIPULATOR>
2819 MANIPULATOR& manipulator,
2820 const char *name,
2821 int nameLength)
2822{
2823 enum { NOT_FOUND = -1 };
2824
2825 const bdlat_AttributeInfo *attributeInfo =
2826 lookupAttributeInfo(name, nameLength);
2827 if (0 == attributeInfo) {
2828 return NOT_FOUND;
2829 }
2830
2831 return manipulateAttribute(manipulator, attributeInfo->d_id);
2832}
2833
2834inline
2839
2840inline
2842{
2843 return d_element2;
2844}
2845
2846inline
2848{
2849 return d_element3;
2850}
2851
2852inline
2854{
2855 return d_element4;
2856}
2857
2858inline
2863
2864inline
2869
2870// ACCESSORS
2871template <class ACCESSOR>
2872int Sequence3::accessAttributes(ACCESSOR& accessor) const
2873{
2874 int ret;
2875
2876 ret = accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
2877 if (ret) {
2878 return ret;
2879 }
2880
2881 ret = accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
2882 if (ret) {
2883 return ret;
2884 }
2885
2886 ret = accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
2887 if (ret) {
2888 return ret;
2889 }
2890
2891 ret = accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
2892 if (ret) {
2893 return ret;
2894 }
2895
2896 ret = accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
2897 if (ret) {
2898 return ret;
2899 }
2900
2901 ret = accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
2902 if (ret) {
2903 return ret;
2904 }
2905
2906 return 0;
2907}
2908
2909template <class ACCESSOR>
2910int Sequence3::accessAttribute(ACCESSOR& accessor, int id) const
2911{
2912 enum { NOT_FOUND = -1 };
2913
2914 switch (id) {
2915 case ATTRIBUTE_ID_ELEMENT1: {
2916 return accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
2917 }
2918 case ATTRIBUTE_ID_ELEMENT2: {
2919 return accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
2920 }
2921 case ATTRIBUTE_ID_ELEMENT3: {
2922 return accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
2923 }
2924 case ATTRIBUTE_ID_ELEMENT4: {
2925 return accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
2926 }
2927 case ATTRIBUTE_ID_ELEMENT5: {
2928 return accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
2929 }
2930 case ATTRIBUTE_ID_ELEMENT6: {
2931 return accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
2932 }
2933 default:
2934 return NOT_FOUND;
2935 }
2936}
2937
2938template <class ACCESSOR>
2940 ACCESSOR& accessor,
2941 const char *name,
2942 int nameLength) const
2943{
2944 enum { NOT_FOUND = -1 };
2945
2946 const bdlat_AttributeInfo *attributeInfo =
2947 lookupAttributeInfo(name, nameLength);
2948 if (0 == attributeInfo) {
2949 return NOT_FOUND;
2950 }
2951
2952 return accessAttribute(accessor, attributeInfo->d_id);
2953}
2954
2955inline
2957{
2958 return d_element1;
2959}
2960
2961inline
2963{
2964 return d_element2;
2965}
2966
2967inline
2969{
2970 return d_element3;
2971}
2972
2973inline
2975{
2976 return d_element4;
2977}
2978
2979inline
2981{
2982 return d_element5;
2983}
2984
2985inline
2990
2991
2992
2993 // ---------------
2994 // class Sequence5
2995 // ---------------
2996
2997// CLASS METHODS
2998// MANIPULATORS
2999template <class MANIPULATOR>
3000int Sequence5::manipulateAttributes(MANIPULATOR& manipulator)
3001{
3002 int ret;
3003
3004 BSLS_ASSERT(d_element1);
3005 ret = manipulator(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
3006 if (ret) {
3007 return ret;
3008 }
3009
3010 ret = manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
3011 if (ret) {
3012 return ret;
3013 }
3014
3015 ret = manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
3016 if (ret) {
3017 return ret;
3018 }
3019
3020 ret = manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
3021 if (ret) {
3022 return ret;
3023 }
3024
3025 ret = manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
3026 if (ret) {
3027 return ret;
3028 }
3029
3030 ret = manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
3031 if (ret) {
3032 return ret;
3033 }
3034
3035 ret = manipulator(&d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
3036 if (ret) {
3037 return ret;
3038 }
3039
3040 return 0;
3041}
3042
3043template <class MANIPULATOR>
3044int Sequence5::manipulateAttribute(MANIPULATOR& manipulator, int id)
3045{
3046 enum { NOT_FOUND = -1 };
3047
3048 switch (id) {
3049 case ATTRIBUTE_ID_ELEMENT1: {
3050 BSLS_ASSERT(d_element1);
3051 return manipulator(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
3052 }
3053 case ATTRIBUTE_ID_ELEMENT2: {
3054 return manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
3055 }
3056 case ATTRIBUTE_ID_ELEMENT3: {
3057 return manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
3058 }
3059 case ATTRIBUTE_ID_ELEMENT4: {
3060 return manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
3061 }
3062 case ATTRIBUTE_ID_ELEMENT5: {
3063 return manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
3064 }
3065 case ATTRIBUTE_ID_ELEMENT6: {
3066 return manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
3067 }
3068 case ATTRIBUTE_ID_ELEMENT7: {
3069 return manipulator(&d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
3070 }
3071 default:
3072 return NOT_FOUND;
3073 }
3074}
3075
3076template <class MANIPULATOR>
3078 MANIPULATOR& manipulator,
3079 const char *name,
3080 int nameLength)
3081{
3082 enum { NOT_FOUND = -1 };
3083
3084 const bdlat_AttributeInfo *attributeInfo =
3085 lookupAttributeInfo(name, nameLength);
3086 if (0 == attributeInfo) {
3087 return NOT_FOUND;
3088 }
3089
3090 return manipulateAttribute(manipulator, attributeInfo->d_id);
3091}
3092
3093inline
3095{
3096 BSLS_ASSERT(d_element1);
3097 return *d_element1;
3098}
3099
3100inline
3102{
3103 return d_element2;
3104}
3105
3106inline
3108{
3109 return d_element3;
3110}
3111
3112inline
3114{
3115 return d_element4;
3116}
3117
3118inline
3120{
3121 return d_element5;
3122}
3123
3124inline
3129
3130inline
3135
3136// ACCESSORS
3137template <class ACCESSOR>
3138int Sequence5::accessAttributes(ACCESSOR& accessor) const
3139{
3140 int ret;
3141
3142 BSLS_ASSERT(d_element1);
3143 ret = accessor(*d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
3144 if (ret) {
3145 return ret;
3146 }
3147
3148 ret = accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
3149 if (ret) {
3150 return ret;
3151 }
3152
3153 ret = accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
3154 if (ret) {
3155 return ret;
3156 }
3157
3158 ret = accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
3159 if (ret) {
3160 return ret;
3161 }
3162
3163 ret = accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
3164 if (ret) {
3165 return ret;
3166 }
3167
3168 ret = accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
3169 if (ret) {
3170 return ret;
3171 }
3172
3173 ret = accessor(d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
3174 if (ret) {
3175 return ret;
3176 }
3177
3178 return 0;
3179}
3180
3181template <class ACCESSOR>
3182int Sequence5::accessAttribute(ACCESSOR& accessor, int id) const
3183{
3184 enum { NOT_FOUND = -1 };
3185
3186 switch (id) {
3187 case ATTRIBUTE_ID_ELEMENT1: {
3188 BSLS_ASSERT(d_element1);
3189 return accessor(*d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
3190 }
3191 case ATTRIBUTE_ID_ELEMENT2: {
3192 return accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
3193 }
3194 case ATTRIBUTE_ID_ELEMENT3: {
3195 return accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
3196 }
3197 case ATTRIBUTE_ID_ELEMENT4: {
3198 return accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
3199 }
3200 case ATTRIBUTE_ID_ELEMENT5: {
3201 return accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
3202 }
3203 case ATTRIBUTE_ID_ELEMENT6: {
3204 return accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
3205 }
3206 case ATTRIBUTE_ID_ELEMENT7: {
3207 return accessor(d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
3208 }
3209 default:
3210 return NOT_FOUND;
3211 }
3212}
3213
3214template <class ACCESSOR>
3216 ACCESSOR& accessor,
3217 const char *name,
3218 int nameLength) const
3219{
3220 enum { NOT_FOUND = -1 };
3221
3222 const bdlat_AttributeInfo *attributeInfo =
3223 lookupAttributeInfo(name, nameLength);
3224 if (0 == attributeInfo) {
3225 return NOT_FOUND;
3226 }
3227
3228 return accessAttribute(accessor, attributeInfo->d_id);
3229}
3230
3231inline
3233{
3234 BSLS_ASSERT(d_element1);
3235 return *d_element1;
3236}
3237
3238inline
3240{
3241 return d_element2;
3242}
3243
3244inline
3246{
3247 return d_element3;
3248}
3249
3250inline
3252{
3253 return d_element4;
3254}
3255
3256inline
3258{
3259 return d_element5;
3260}
3261
3262inline
3264{
3265 return d_element6;
3266}
3267
3268inline
3270{
3271 return d_element7;
3272}
3273
3274
3275
3276 // ---------------
3277 // class Sequence6
3278 // ---------------
3279
3280// CLASS METHODS
3281// MANIPULATORS
3282template <class MANIPULATOR>
3283int Sequence6::manipulateAttributes(MANIPULATOR& manipulator)
3284{
3285 int ret;
3286
3287 ret = manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
3288 if (ret) {
3289 return ret;
3290 }
3291
3292 ret = manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
3293 if (ret) {
3294 return ret;
3295 }
3296
3297 ret = manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
3298 if (ret) {
3299 return ret;
3300 }
3301
3302 ret = manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
3303 if (ret) {
3304 return ret;
3305 }
3306
3307 ret = manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
3308 if (ret) {
3309 return ret;
3310 }
3311
3312 ret = manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
3313 if (ret) {
3314 return ret;
3315 }
3316
3317 ret = manipulator(&d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
3318 if (ret) {
3319 return ret;
3320 }
3321
3322 ret = manipulator(&d_element8, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT8]);
3323 if (ret) {
3324 return ret;
3325 }
3326
3327 ret = manipulator(&d_element9, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT9]);
3328 if (ret) {
3329 return ret;
3330 }
3331
3332 ret = manipulator(&d_element10, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT10]);
3333 if (ret) {
3334 return ret;
3335 }
3336
3337 ret = manipulator(&d_element11, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT11]);
3338 if (ret) {
3339 return ret;
3340 }
3341
3342 ret = manipulator(&d_element12, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT12]);
3343 if (ret) {
3344 return ret;
3345 }
3346
3347 ret = manipulator(&d_element13, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT13]);
3348 if (ret) {
3349 return ret;
3350 }
3351
3352 ret = manipulator(&d_element14, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT14]);
3353 if (ret) {
3354 return ret;
3355 }
3356
3357 ret = manipulator(&d_element15, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT15]);
3358 if (ret) {
3359 return ret;
3360 }
3361
3362 return 0;
3363}
3364
3365template <class MANIPULATOR>
3366int Sequence6::manipulateAttribute(MANIPULATOR& manipulator, int id)
3367{
3368 enum { NOT_FOUND = -1 };
3369
3370 switch (id) {
3371 case ATTRIBUTE_ID_ELEMENT1: {
3372 return manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
3373 }
3374 case ATTRIBUTE_ID_ELEMENT2: {
3375 return manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
3376 }
3377 case ATTRIBUTE_ID_ELEMENT3: {
3378 return manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
3379 }
3380 case ATTRIBUTE_ID_ELEMENT4: {
3381 return manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
3382 }
3383 case ATTRIBUTE_ID_ELEMENT5: {
3384 return manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
3385 }
3386 case ATTRIBUTE_ID_ELEMENT6: {
3387 return manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
3388 }
3389 case ATTRIBUTE_ID_ELEMENT7: {
3390 return manipulator(&d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
3391 }
3392 case ATTRIBUTE_ID_ELEMENT8: {
3393 return manipulator(&d_element8, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT8]);
3394 }
3395 case ATTRIBUTE_ID_ELEMENT9: {
3396 return manipulator(&d_element9, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT9]);
3397 }
3399 return manipulator(&d_element10, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT10]);
3400 }
3402 return manipulator(&d_element11, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT11]);
3403 }
3405 return manipulator(&d_element12, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT12]);
3406 }
3408 return manipulator(&d_element13, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT13]);
3409 }
3411 return manipulator(&d_element14, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT14]);
3412 }
3414 return manipulator(&d_element15, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT15]);
3415 }
3416 default:
3417 return NOT_FOUND;
3418 }
3419}
3420
3421template <class MANIPULATOR>
3423 MANIPULATOR& manipulator,
3424 const char *name,
3425 int nameLength)
3426{
3427 enum { NOT_FOUND = -1 };
3428
3429 const bdlat_AttributeInfo *attributeInfo =
3430 lookupAttributeInfo(name, nameLength);
3431 if (0 == attributeInfo) {
3432 return NOT_FOUND;
3433 }
3434
3435 return manipulateAttribute(manipulator, attributeInfo->d_id);
3436}
3437
3438inline
3440{
3441 return d_element1;
3442}
3443
3444inline
3449
3450inline
3455
3456inline
3457unsigned int& Sequence6::element4()
3458{
3459 return d_element4;
3460}
3461
3462inline
3463unsigned char& Sequence6::element5()
3464{
3465 return d_element5;
3466}
3467
3468inline
3473
3474inline
3476{
3477 return d_element7;
3478}
3479
3480inline
3482{
3483 return d_element8;
3484}
3485
3486inline
3488{
3489 return d_element9;
3490}
3491
3492inline
3494{
3495 return d_element10;
3496}
3497
3498inline
3500{
3501 return d_element11;
3502}
3503
3504inline
3506{
3507 return d_element12;
3508}
3509
3510inline
3515
3516inline
3518{
3519 return d_element14;
3520}
3521
3522inline
3527
3528// ACCESSORS
3529template <class ACCESSOR>
3530int Sequence6::accessAttributes(ACCESSOR& accessor) const
3531{
3532 int ret;
3533
3534 ret = accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
3535 if (ret) {
3536 return ret;
3537 }
3538
3539 ret = accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
3540 if (ret) {
3541 return ret;
3542 }
3543
3544 ret = accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
3545 if (ret) {
3546 return ret;
3547 }
3548
3549 ret = accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
3550 if (ret) {
3551 return ret;
3552 }
3553
3554 ret = accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
3555 if (ret) {
3556 return ret;
3557 }
3558
3559 ret = accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
3560 if (ret) {
3561 return ret;
3562 }
3563
3564 ret = accessor(d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
3565 if (ret) {
3566 return ret;
3567 }
3568
3569 ret = accessor(d_element8, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT8]);
3570 if (ret) {
3571 return ret;
3572 }
3573
3574 ret = accessor(d_element9, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT9]);
3575 if (ret) {
3576 return ret;
3577 }
3578
3579 ret = accessor(d_element10, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT10]);
3580 if (ret) {
3581 return ret;
3582 }
3583
3584 ret = accessor(d_element11, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT11]);
3585 if (ret) {
3586 return ret;
3587 }
3588
3589 ret = accessor(d_element12, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT12]);
3590 if (ret) {
3591 return ret;
3592 }
3593
3594 ret = accessor(d_element13, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT13]);
3595 if (ret) {
3596 return ret;
3597 }
3598
3599 ret = accessor(d_element14, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT14]);
3600 if (ret) {
3601 return ret;
3602 }
3603
3604 ret = accessor(d_element15, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT15]);
3605 if (ret) {
3606 return ret;
3607 }
3608
3609 return 0;
3610}
3611
3612template <class ACCESSOR>
3613int Sequence6::accessAttribute(ACCESSOR& accessor, int id) const
3614{
3615 enum { NOT_FOUND = -1 };
3616
3617 switch (id) {
3618 case ATTRIBUTE_ID_ELEMENT1: {
3619 return accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
3620 }
3621 case ATTRIBUTE_ID_ELEMENT2: {
3622 return accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
3623 }
3624 case ATTRIBUTE_ID_ELEMENT3: {
3625 return accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
3626 }
3627 case ATTRIBUTE_ID_ELEMENT4: {
3628 return accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
3629 }
3630 case ATTRIBUTE_ID_ELEMENT5: {
3631 return accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
3632 }
3633 case ATTRIBUTE_ID_ELEMENT6: {
3634 return accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
3635 }
3636 case ATTRIBUTE_ID_ELEMENT7: {
3637 return accessor(d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
3638 }
3639 case ATTRIBUTE_ID_ELEMENT8: {
3640 return accessor(d_element8, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT8]);
3641 }
3642 case ATTRIBUTE_ID_ELEMENT9: {
3643 return accessor(d_element9, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT9]);
3644 }
3646 return accessor(d_element10, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT10]);
3647 }
3649 return accessor(d_element11, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT11]);
3650 }
3652 return accessor(d_element12, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT12]);
3653 }
3655 return accessor(d_element13, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT13]);
3656 }
3658 return accessor(d_element14, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT14]);
3659 }
3661 return accessor(d_element15, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT15]);
3662 }
3663 default:
3664 return NOT_FOUND;
3665 }
3666}
3667
3668template <class ACCESSOR>
3670 ACCESSOR& accessor,
3671 const char *name,
3672 int nameLength) const
3673{
3674 enum { NOT_FOUND = -1 };
3675
3676 const bdlat_AttributeInfo *attributeInfo =
3677 lookupAttributeInfo(name, nameLength);
3678 if (0 == attributeInfo) {
3679 return NOT_FOUND;
3680 }
3681
3682 return accessAttribute(accessor, attributeInfo->d_id);
3683}
3684
3685inline
3687{
3688 return d_element1;
3689}
3690
3691inline
3693{
3694 return d_element2;
3695}
3696
3697inline
3699{
3700 return d_element3;
3701}
3702
3703inline
3704unsigned int Sequence6::element4() const
3705{
3706 return d_element4;
3707}
3708
3709inline
3710unsigned char Sequence6::element5() const
3711{
3712 return d_element5;
3713}
3714
3715inline
3717{
3718 return d_element6;
3719}
3720
3721inline
3723{
3724 return d_element7;
3725}
3726
3727inline
3729{
3730 return d_element8;
3731}
3732
3733inline
3735{
3736 return d_element9;
3737}
3738
3739inline
3741{
3742 return d_element10;
3743}
3744
3745inline
3747{
3748 return d_element11;
3749}
3750
3751inline
3753{
3754 return d_element12;
3755}
3756
3757inline
3759{
3760 return d_element13;
3761}
3762
3763inline
3765{
3766 return d_element14;
3767}
3768
3769inline
3771{
3772 return d_element15;
3773}
3774
3775
3776
3777 // -------------
3778 // class Choice3
3779 // -------------
3780
3781// CLASS METHODS
3782// CREATORS
3783inline
3785: d_selectionId(SELECTION_ID_UNDEFINED)
3786, d_allocator_p(bslma::Default::allocator(basicAllocator))
3787{
3788}
3789
3790inline
3792{
3793 reset();
3794}
3795
3796// MANIPULATORS
3797template <class MANIPULATOR>
3798int Choice3::manipulateSelection(MANIPULATOR& manipulator)
3799{
3800 switch (d_selectionId) {
3802 return manipulator(&d_selection1.object(),
3805 return manipulator(&d_selection2.object(),
3808 return manipulator(&d_selection3.object(),
3811 return manipulator(&d_selection4.object(),
3813 default:
3815 return -1;
3816 }
3817}
3818
3819inline
3821{
3822 BSLS_ASSERT(SELECTION_ID_SELECTION1 == d_selectionId);
3823 return d_selection1.object();
3824}
3825
3826inline
3827unsigned char& Choice3::selection2()
3828{
3829 BSLS_ASSERT(SELECTION_ID_SELECTION2 == d_selectionId);
3830 return d_selection2.object();
3831}
3832
3833inline
3839
3840inline
3846
3847// ACCESSORS
3848inline
3850{
3851 return d_selectionId;
3852}
3853
3854template <class ACCESSOR>
3855int Choice3::accessSelection(ACCESSOR& accessor) const
3856{
3857 switch (d_selectionId) {
3859 return accessor(d_selection1.object(),
3862 return accessor(d_selection2.object(),
3865 return accessor(d_selection3.object(),
3868 return accessor(d_selection4.object(),
3870 default:
3871 BSLS_ASSERT(SELECTION_ID_UNDEFINED == d_selectionId);
3872 return -1;
3873 }
3874}
3875
3876inline
3878{
3879 BSLS_ASSERT(SELECTION_ID_SELECTION1 == d_selectionId);
3880 return d_selection1.object();
3881}
3882
3883inline
3884const unsigned char& Choice3::selection2() const
3885{
3886 BSLS_ASSERT(SELECTION_ID_SELECTION2 == d_selectionId);
3887 return d_selection2.object();
3888}
3889
3890inline
3892{
3893 BSLS_ASSERT(SELECTION_ID_SELECTION3 == d_selectionId);
3894 return d_selection3.object();
3895}
3896
3897inline
3899{
3900 BSLS_ASSERT(SELECTION_ID_SELECTION4 == d_selectionId);
3901 return d_selection4.object();
3902}
3903
3904inline
3906{
3907 return SELECTION_ID_SELECTION1 == d_selectionId;
3908}
3909
3910inline
3912{
3913 return SELECTION_ID_SELECTION2 == d_selectionId;
3914}
3915
3916inline
3918{
3919 return SELECTION_ID_SELECTION3 == d_selectionId;
3920}
3921
3922inline
3924{
3925 return SELECTION_ID_SELECTION4 == d_selectionId;
3926}
3927
3928inline
3930{
3931 return SELECTION_ID_UNDEFINED == d_selectionId;
3932}
3933
3934
3935 // -------------
3936 // class Choice1
3937 // -------------
3938
3939// CLASS METHODS
3940// CREATORS
3941inline
3943: d_selectionId(SELECTION_ID_UNDEFINED)
3944, d_allocator_p(bslma::Default::allocator(basicAllocator))
3945{
3946}
3947
3948inline
3950{
3951 reset();
3952}
3953
3954// MANIPULATORS
3955template <class MANIPULATOR>
3956int Choice1::manipulateSelection(MANIPULATOR& manipulator)
3957{
3958 switch (d_selectionId) {
3960 return manipulator(&d_selection1.object(),
3963 return manipulator(&d_selection2.object(),
3966 return manipulator(d_selection3,
3969 return manipulator(d_selection4,
3971 default:
3973 return -1;
3974 }
3975}
3976
3977inline
3979{
3980 BSLS_ASSERT(SELECTION_ID_SELECTION1 == d_selectionId);
3981 return d_selection1.object();
3982}
3983
3984inline
3986{
3987 BSLS_ASSERT(SELECTION_ID_SELECTION2 == d_selectionId);
3988 return d_selection2.object();
3989}
3990
3991inline
3993{
3994 BSLS_ASSERT(SELECTION_ID_SELECTION3 == d_selectionId);
3995 return *d_selection3;
3996}
3997
3998inline
4000{
4001 BSLS_ASSERT(SELECTION_ID_SELECTION4 == d_selectionId);
4002 return *d_selection4;
4003}
4004
4005// ACCESSORS
4006inline
4008{
4009 return d_selectionId;
4010}
4011
4012template <class ACCESSOR>
4013int Choice1::accessSelection(ACCESSOR& accessor) const
4014{
4015 switch (d_selectionId) {
4017 return accessor(d_selection1.object(),
4020 return accessor(d_selection2.object(),
4023 return accessor(*d_selection3,
4026 return accessor(*d_selection4,
4028 default:
4029 BSLS_ASSERT(SELECTION_ID_UNDEFINED == d_selectionId);
4030 return -1;
4031 }
4032}
4033
4034inline
4035const int& Choice1::selection1() const
4036{
4037 BSLS_ASSERT(SELECTION_ID_SELECTION1 == d_selectionId);
4038 return d_selection1.object();
4039}
4040
4041inline
4042const double& Choice1::selection2() const
4043{
4044 BSLS_ASSERT(SELECTION_ID_SELECTION2 == d_selectionId);
4045 return d_selection2.object();
4046}
4047
4048inline
4050{
4051 BSLS_ASSERT(SELECTION_ID_SELECTION3 == d_selectionId);
4052 return *d_selection3;
4053}
4054
4055inline
4057{
4058 BSLS_ASSERT(SELECTION_ID_SELECTION4 == d_selectionId);
4059 return *d_selection4;
4060}
4061
4062inline
4064{
4065 return SELECTION_ID_SELECTION1 == d_selectionId;
4066}
4067
4068inline
4070{
4071 return SELECTION_ID_SELECTION2 == d_selectionId;
4072}
4073
4074inline
4076{
4077 return SELECTION_ID_SELECTION3 == d_selectionId;
4078}
4079
4080inline
4082{
4083 return SELECTION_ID_SELECTION4 == d_selectionId;
4084}
4085
4086inline
4088{
4089 return SELECTION_ID_UNDEFINED == d_selectionId;
4090}
4091
4092
4093 // -------------
4094 // class Choice2
4095 // -------------
4096
4097// CLASS METHODS
4098// CREATORS
4099inline
4101: d_selectionId(SELECTION_ID_UNDEFINED)
4102, d_allocator_p(bslma::Default::allocator(basicAllocator))
4103{
4104}
4105
4106inline
4108{
4109 reset();
4110}
4111
4112// MANIPULATORS
4113template <class MANIPULATOR>
4114int Choice2::manipulateSelection(MANIPULATOR& manipulator)
4115{
4116 switch (d_selectionId) {
4118 return manipulator(&d_selection1.object(),
4121 return manipulator(&d_selection2.object(),
4124 return manipulator(d_selection3,
4127 return manipulator(&d_selection4.object(),
4129 default:
4131 return -1;
4132 }
4133}
4134
4135inline
4137{
4138 BSLS_ASSERT(SELECTION_ID_SELECTION1 == d_selectionId);
4139 return d_selection1.object();
4140}
4141
4142inline
4144{
4145 BSLS_ASSERT(SELECTION_ID_SELECTION2 == d_selectionId);
4146 return d_selection2.object();
4147}
4148
4149inline
4151{
4152 BSLS_ASSERT(SELECTION_ID_SELECTION3 == d_selectionId);
4153 return *d_selection3;
4154}
4155
4156inline
4157unsigned int& Choice2::selection4()
4158{
4159 BSLS_ASSERT(SELECTION_ID_SELECTION4 == d_selectionId);
4160 return d_selection4.object();
4161}
4162
4163// ACCESSORS
4164inline
4166{
4167 return d_selectionId;
4168}
4169
4170template <class ACCESSOR>
4171int Choice2::accessSelection(ACCESSOR& accessor) const
4172{
4173 switch (d_selectionId) {
4175 return accessor(d_selection1.object(),
4178 return accessor(d_selection2.object(),
4181 return accessor(*d_selection3,
4184 return accessor(d_selection4.object(),
4186 default:
4187 BSLS_ASSERT(SELECTION_ID_UNDEFINED == d_selectionId);
4188 return -1;
4189 }
4190}
4191
4192inline
4193const bool& Choice2::selection1() const
4194{
4195 BSLS_ASSERT(SELECTION_ID_SELECTION1 == d_selectionId);
4196 return d_selection1.object();
4197}
4198
4199inline
4201{
4202 BSLS_ASSERT(SELECTION_ID_SELECTION2 == d_selectionId);
4203 return d_selection2.object();
4204}
4205
4206inline
4208{
4209 BSLS_ASSERT(SELECTION_ID_SELECTION3 == d_selectionId);
4210 return *d_selection3;
4211}
4212
4213inline
4214const unsigned int& Choice2::selection4() const
4215{
4216 BSLS_ASSERT(SELECTION_ID_SELECTION4 == d_selectionId);
4217 return d_selection4.object();
4218}
4219
4220inline
4222{
4223 return SELECTION_ID_SELECTION1 == d_selectionId;
4224}
4225
4226inline
4228{
4229 return SELECTION_ID_SELECTION2 == d_selectionId;
4230}
4231
4232inline
4234{
4235 return SELECTION_ID_SELECTION3 == d_selectionId;
4236}
4237
4238inline
4240{
4241 return SELECTION_ID_SELECTION4 == d_selectionId;
4242}
4243
4244inline
4246{
4247 return SELECTION_ID_UNDEFINED == d_selectionId;
4248}
4249
4250
4251 // ---------------
4252 // class Sequence4
4253 // ---------------
4254
4255// CLASS METHODS
4256// MANIPULATORS
4257template <class MANIPULATOR>
4258int Sequence4::manipulateAttributes(MANIPULATOR& manipulator)
4259{
4260 int ret;
4261
4262 ret = manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
4263 if (ret) {
4264 return ret;
4265 }
4266
4267 ret = manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
4268 if (ret) {
4269 return ret;
4270 }
4271
4272 ret = manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
4273 if (ret) {
4274 return ret;
4275 }
4276
4277 ret = manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
4278 if (ret) {
4279 return ret;
4280 }
4281
4282 ret = manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
4283 if (ret) {
4284 return ret;
4285 }
4286
4287 ret = manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
4288 if (ret) {
4289 return ret;
4290 }
4291
4292 ret = manipulator(&d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
4293 if (ret) {
4294 return ret;
4295 }
4296
4297 ret = manipulator(&d_element8, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT8]);
4298 if (ret) {
4299 return ret;
4300 }
4301
4302 ret = manipulator(&d_element9, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT9]);
4303 if (ret) {
4304 return ret;
4305 }
4306
4307 ret = manipulator(&d_element10, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT10]);
4308 if (ret) {
4309 return ret;
4310 }
4311
4312 ret = manipulator(&d_element11, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT11]);
4313 if (ret) {
4314 return ret;
4315 }
4316
4317 ret = manipulator(&d_element12, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT12]);
4318 if (ret) {
4319 return ret;
4320 }
4321
4322 ret = manipulator(&d_element13, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT13]);
4323 if (ret) {
4324 return ret;
4325 }
4326
4327 ret = manipulator(&d_element14, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT14]);
4328 if (ret) {
4329 return ret;
4330 }
4331
4332 ret = manipulator(&d_element15, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT15]);
4333 if (ret) {
4334 return ret;
4335 }
4336
4337 ret = manipulator(&d_element16, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT16]);
4338 if (ret) {
4339 return ret;
4340 }
4341
4342 ret = manipulator(&d_element17, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT17]);
4343 if (ret) {
4344 return ret;
4345 }
4346
4347 ret = manipulator(&d_element18, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT18]);
4348 if (ret) {
4349 return ret;
4350 }
4351
4352 ret = manipulator(&d_element19, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT19]);
4353 if (ret) {
4354 return ret;
4355 }
4356
4357 return 0;
4358}
4359
4360template <class MANIPULATOR>
4361int Sequence4::manipulateAttribute(MANIPULATOR& manipulator, int id)
4362{
4363 enum { NOT_FOUND = -1 };
4364
4365 switch (id) {
4366 case ATTRIBUTE_ID_ELEMENT1: {
4367 return manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
4368 }
4369 case ATTRIBUTE_ID_ELEMENT2: {
4370 return manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
4371 }
4372 case ATTRIBUTE_ID_ELEMENT3: {
4373 return manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
4374 }
4375 case ATTRIBUTE_ID_ELEMENT4: {
4376 return manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
4377 }
4378 case ATTRIBUTE_ID_ELEMENT5: {
4379 return manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
4380 }
4381 case ATTRIBUTE_ID_ELEMENT6: {
4382 return manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
4383 }
4384 case ATTRIBUTE_ID_ELEMENT7: {
4385 return manipulator(&d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
4386 }
4387 case ATTRIBUTE_ID_ELEMENT8: {
4388 return manipulator(&d_element8, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT8]);
4389 }
4390 case ATTRIBUTE_ID_ELEMENT9: {
4391 return manipulator(&d_element9, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT9]);
4392 }
4394 return manipulator(&d_element10, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT10]);
4395 }
4397 return manipulator(&d_element11, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT11]);
4398 }
4400 return manipulator(&d_element12, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT12]);
4401 }
4403 return manipulator(&d_element13, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT13]);
4404 }
4406 return manipulator(&d_element14, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT14]);
4407 }
4409 return manipulator(&d_element15, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT15]);
4410 }
4412 return manipulator(&d_element16, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT16]);
4413 }
4415 return manipulator(&d_element17, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT17]);
4416 }
4418 return manipulator(&d_element18, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT18]);
4419 }
4421 return manipulator(&d_element19, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT19]);
4422 }
4423 default:
4424 return NOT_FOUND;
4425 }
4426}
4427
4428template <class MANIPULATOR>
4430 MANIPULATOR& manipulator,
4431 const char *name,
4432 int nameLength)
4433{
4434 enum { NOT_FOUND = -1 };
4435
4436 const bdlat_AttributeInfo *attributeInfo =
4437 lookupAttributeInfo(name, nameLength);
4438 if (0 == attributeInfo) {
4439 return NOT_FOUND;
4440 }
4441
4442 return manipulateAttribute(manipulator, attributeInfo->d_id);
4443}
4444
4445inline
4447{
4448 return d_element1;
4449}
4450
4451inline
4453{
4454 return d_element2;
4455}
4456
4457inline
4459{
4460 return d_element3;
4461}
4462
4463inline
4465{
4466 return d_element4;
4467}
4468
4469inline
4471{
4472 return d_element5;
4473}
4474
4475inline
4480
4481inline
4486
4487inline
4489{
4490 return d_element8;
4491}
4492
4493inline
4495{
4496 return d_element9;
4497}
4498
4499inline
4501{
4502 return d_element10;
4503}
4504
4505inline
4507{
4508 return d_element11;
4509}
4510
4511inline
4513{
4514 return d_element12;
4515}
4516
4517inline
4519{
4520 return d_element13;
4521}
4522
4523inline
4525{
4526 return d_element14;
4527}
4528
4529inline
4531{
4532 return d_element15;
4533}
4534
4535inline
4537{
4538 return d_element16;
4539}
4540
4541inline
4543{
4544 return d_element17;
4545}
4546
4547inline
4549{
4550 return d_element18;
4551}
4552
4553inline
4555{
4556 return d_element19;
4557}
4558
4559// ACCESSORS
4560template <class ACCESSOR>
4561int Sequence4::accessAttributes(ACCESSOR& accessor) const
4562{
4563 int ret;
4564
4565 ret = accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
4566 if (ret) {
4567 return ret;
4568 }
4569
4570 ret = accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
4571 if (ret) {
4572 return ret;
4573 }
4574
4575 ret = accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
4576 if (ret) {
4577 return ret;
4578 }
4579
4580 ret = accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
4581 if (ret) {
4582 return ret;
4583 }
4584
4585 ret = accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
4586 if (ret) {
4587 return ret;
4588 }
4589
4590 ret = accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
4591 if (ret) {
4592 return ret;
4593 }
4594
4595 ret = accessor(d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
4596 if (ret) {
4597 return ret;
4598 }
4599
4600 ret = accessor(d_element8, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT8]);
4601 if (ret) {
4602 return ret;
4603 }
4604
4605 ret = accessor(d_element9, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT9]);
4606 if (ret) {
4607 return ret;
4608 }
4609
4610 ret = accessor(d_element10, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT10]);
4611 if (ret) {
4612 return ret;
4613 }
4614
4615 ret = accessor(d_element11, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT11]);
4616 if (ret) {
4617 return ret;
4618 }
4619
4620 ret = accessor(d_element12, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT12]);
4621 if (ret) {
4622 return ret;
4623 }
4624
4625 ret = accessor(d_element13, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT13]);
4626 if (ret) {
4627 return ret;
4628 }
4629
4630 ret = accessor(d_element14, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT14]);
4631 if (ret) {
4632 return ret;
4633 }
4634
4635 ret = accessor(d_element15, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT15]);
4636 if (ret) {
4637 return ret;
4638 }
4639
4640 ret = accessor(d_element16, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT16]);
4641 if (ret) {
4642 return ret;
4643 }
4644
4645 ret = accessor(d_element17, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT17]);
4646 if (ret) {
4647 return ret;
4648 }
4649
4650 ret = accessor(d_element18, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT18]);
4651 if (ret) {
4652 return ret;
4653 }
4654
4655 ret = accessor(d_element19, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT19]);
4656 if (ret) {
4657 return ret;
4658 }
4659
4660 return 0;
4661}
4662
4663template <class ACCESSOR>
4664int Sequence4::accessAttribute(ACCESSOR& accessor, int id) const
4665{
4666 enum { NOT_FOUND = -1 };
4667
4668 switch (id) {
4669 case ATTRIBUTE_ID_ELEMENT1: {
4670 return accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
4671 }
4672 case ATTRIBUTE_ID_ELEMENT2: {
4673 return accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
4674 }
4675 case ATTRIBUTE_ID_ELEMENT3: {
4676 return accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
4677 }
4678 case ATTRIBUTE_ID_ELEMENT4: {
4679 return accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
4680 }
4681 case ATTRIBUTE_ID_ELEMENT5: {
4682 return accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
4683 }
4684 case ATTRIBUTE_ID_ELEMENT6: {
4685 return accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
4686 }
4687 case ATTRIBUTE_ID_ELEMENT7: {
4688 return accessor(d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
4689 }
4690 case ATTRIBUTE_ID_ELEMENT8: {
4691 return accessor(d_element8, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT8]);
4692 }
4693 case ATTRIBUTE_ID_ELEMENT9: {
4694 return accessor(d_element9, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT9]);
4695 }
4697 return accessor(d_element10, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT10]);
4698 }
4700 return accessor(d_element11, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT11]);
4701 }
4703 return accessor(d_element12, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT12]);
4704 }
4706 return accessor(d_element13, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT13]);
4707 }
4709 return accessor(d_element14, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT14]);
4710 }
4712 return accessor(d_element15, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT15]);
4713 }
4715 return accessor(d_element16, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT16]);
4716 }
4718 return accessor(d_element17, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT17]);
4719 }
4721 return accessor(d_element18, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT18]);
4722 }
4724 return accessor(d_element19, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT19]);
4725 }
4726 default:
4727 return NOT_FOUND;
4728 }
4729}
4730
4731template <class ACCESSOR>
4733 ACCESSOR& accessor,
4734 const char *name,
4735 int nameLength) const
4736{
4737 enum { NOT_FOUND = -1 };
4738
4739 const bdlat_AttributeInfo *attributeInfo =
4740 lookupAttributeInfo(name, nameLength);
4741 if (0 == attributeInfo) {
4742 return NOT_FOUND;
4743 }
4744
4745 return accessAttribute(accessor, attributeInfo->d_id);
4746}
4747
4748inline
4750{
4751 return d_element1;
4752}
4753
4754inline
4756{
4757 return d_element2;
4758}
4759
4760inline
4762{
4763 return d_element3;
4764}
4765
4766inline
4768{
4769 return d_element4;
4770}
4771
4772inline
4774{
4775 return d_element5;
4776}
4777
4778inline
4780{
4781 return d_element6;
4782}
4783
4784inline
4786{
4787 return d_element7;
4788}
4789
4790inline
4792{
4793 return d_element8;
4794}
4795
4796inline
4798{
4799 return d_element9;
4800}
4801
4802inline
4804{
4805 return d_element10;
4806}
4807
4808inline
4810{
4811 return d_element11;
4812}
4813
4814inline
4816{
4817 return d_element12;
4818}
4819
4820inline
4822{
4823 return d_element13;
4824}
4825
4826inline
4828{
4829 return d_element14;
4830}
4831
4832inline
4834{
4835 return d_element15;
4836}
4837
4838inline
4840{
4841 return d_element16;
4842}
4843
4844inline
4846{
4847 return d_element17;
4848}
4849
4850inline
4852{
4853 return d_element18;
4854}
4855
4856inline
4858{
4859 return d_element19;
4860}
4861
4862
4863
4864 // ---------------
4865 // class Sequence1
4866 // ---------------
4867
4868// CLASS METHODS
4869// MANIPULATORS
4870template <class MANIPULATOR>
4871int Sequence1::manipulateAttributes(MANIPULATOR& manipulator)
4872{
4873 int ret;
4874
4875 ret = manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
4876 if (ret) {
4877 return ret;
4878 }
4879
4880 ret = manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
4881 if (ret) {
4882 return ret;
4883 }
4884
4885 BSLS_ASSERT(d_element3);
4886 ret = manipulator(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
4887 if (ret) {
4888 return ret;
4889 }
4890
4891 ret = manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
4892 if (ret) {
4893 return ret;
4894 }
4895
4896 ret = manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
4897 if (ret) {
4898 return ret;
4899 }
4900
4901 return 0;
4902}
4903
4904template <class MANIPULATOR>
4905int Sequence1::manipulateAttribute(MANIPULATOR& manipulator, int id)
4906{
4907 enum { NOT_FOUND = -1 };
4908
4909 switch (id) {
4910 case ATTRIBUTE_ID_ELEMENT1: {
4911 return manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
4912 }
4913 case ATTRIBUTE_ID_ELEMENT2: {
4914 return manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
4915 }
4916 case ATTRIBUTE_ID_ELEMENT3: {
4917 BSLS_ASSERT(d_element3);
4918 return manipulator(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
4919 }
4920 case ATTRIBUTE_ID_ELEMENT4: {
4921 return manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
4922 }
4923 case ATTRIBUTE_ID_ELEMENT5: {
4924 return manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
4925 }
4926 default:
4927 return NOT_FOUND;
4928 }
4929}
4930
4931template <class MANIPULATOR>
4933 MANIPULATOR& manipulator,
4934 const char *name,
4935 int nameLength)
4936{
4937 enum { NOT_FOUND = -1 };
4938
4939 const bdlat_AttributeInfo *attributeInfo =
4940 lookupAttributeInfo(name, nameLength);
4941 if (0 == attributeInfo) {
4942 return NOT_FOUND;
4943 }
4944
4945 return manipulateAttribute(manipulator, attributeInfo->d_id);
4946}
4947
4948inline
4950{
4951 return d_element1;
4952}
4953
4954inline
4956{
4957 return d_element2;
4958}
4959
4960inline
4962{
4963 BSLS_ASSERT(d_element3);
4964 return *d_element3;
4965}
4966
4967inline
4969{
4970 return d_element4;
4971}
4972
4973inline
4975{
4976 return d_element5;
4977}
4978
4979// ACCESSORS
4980template <class ACCESSOR>
4981int Sequence1::accessAttributes(ACCESSOR& accessor) const
4982{
4983 int ret;
4984
4985 ret = accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
4986 if (ret) {
4987 return ret;
4988 }
4989
4990 ret = accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
4991 if (ret) {
4992 return ret;
4993 }
4994
4995 BSLS_ASSERT(d_element3);
4996 ret = accessor(*d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
4997 if (ret) {
4998 return ret;
4999 }
5000
5001 ret = accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
5002 if (ret) {
5003 return ret;
5004 }
5005
5006 ret = accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
5007 if (ret) {
5008 return ret;
5009 }
5010
5011 return 0;
5012}
5013
5014template <class ACCESSOR>
5015int Sequence1::accessAttribute(ACCESSOR& accessor, int id) const
5016{
5017 enum { NOT_FOUND = -1 };
5018
5019 switch (id) {
5020 case ATTRIBUTE_ID_ELEMENT1: {
5021 return accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
5022 }
5023 case ATTRIBUTE_ID_ELEMENT2: {
5024 return accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
5025 }
5026 case ATTRIBUTE_ID_ELEMENT3: {
5027 BSLS_ASSERT(d_element3);
5028 return accessor(*d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
5029 }
5030 case ATTRIBUTE_ID_ELEMENT4: {
5031 return accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
5032 }
5033 case ATTRIBUTE_ID_ELEMENT5: {
5034 return accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
5035 }
5036 default:
5037 return NOT_FOUND;
5038 }
5039}
5040
5041template <class ACCESSOR>
5043 ACCESSOR& accessor,
5044 const char *name,
5045 int nameLength) const
5046{
5047 enum { NOT_FOUND = -1 };
5048
5049 const bdlat_AttributeInfo *attributeInfo =
5050 lookupAttributeInfo(name, nameLength);
5051 if (0 == attributeInfo) {
5052 return NOT_FOUND;
5053 }
5054
5055 return accessAttribute(accessor, attributeInfo->d_id);
5056}
5057
5058inline
5060{
5061 return d_element1;
5062}
5063
5064inline
5066{
5067 return d_element2;
5068}
5069
5070inline
5072{
5073 BSLS_ASSERT(d_element3);
5074 return *d_element3;
5075}
5076
5077inline
5079{
5080 return d_element4;
5081}
5082
5083inline
5085{
5086 return d_element5;
5087}
5088
5089
5090
5091 // ---------------
5092 // class Sequence2
5093 // ---------------
5094
5095// CLASS METHODS
5096// MANIPULATORS
5097template <class MANIPULATOR>
5098int Sequence2::manipulateAttributes(MANIPULATOR& manipulator)
5099{
5100 int ret;
5101
5102 ret = manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
5103 if (ret) {
5104 return ret;
5105 }
5106
5107 ret = manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
5108 if (ret) {
5109 return ret;
5110 }
5111
5112 ret = manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
5113 if (ret) {
5114 return ret;
5115 }
5116
5117 ret = manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
5118 if (ret) {
5119 return ret;
5120 }
5121
5122 ret = manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
5123 if (ret) {
5124 return ret;
5125 }
5126
5127 ret = manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
5128 if (ret) {
5129 return ret;
5130 }
5131
5132 ret = manipulator(&d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
5133 if (ret) {
5134 return ret;
5135 }
5136
5137 return 0;
5138}
5139
5140template <class MANIPULATOR>
5141int Sequence2::manipulateAttribute(MANIPULATOR& manipulator, int id)
5142{
5143 enum { NOT_FOUND = -1 };
5144
5145 switch (id) {
5146 case ATTRIBUTE_ID_ELEMENT1: {
5147 return manipulator(&d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
5148 }
5149 case ATTRIBUTE_ID_ELEMENT2: {
5150 return manipulator(&d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
5151 }
5152 case ATTRIBUTE_ID_ELEMENT3: {
5153 return manipulator(&d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
5154 }
5155 case ATTRIBUTE_ID_ELEMENT4: {
5156 return manipulator(&d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
5157 }
5158 case ATTRIBUTE_ID_ELEMENT5: {
5159 return manipulator(&d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
5160 }
5161 case ATTRIBUTE_ID_ELEMENT6: {
5162 return manipulator(&d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
5163 }
5164 case ATTRIBUTE_ID_ELEMENT7: {
5165 return manipulator(&d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
5166 }
5167 default:
5168 return NOT_FOUND;
5169 }
5170}
5171
5172template <class MANIPULATOR>
5174 MANIPULATOR& manipulator,
5175 const char *name,
5176 int nameLength)
5177{
5178 enum { NOT_FOUND = -1 };
5179
5180 const bdlat_AttributeInfo *attributeInfo =
5181 lookupAttributeInfo(name, nameLength);
5182 if (0 == attributeInfo) {
5183 return NOT_FOUND;
5184 }
5185
5186 return manipulateAttribute(manipulator, attributeInfo->d_id);
5187}
5188
5189inline
5191{
5192 return d_element1;
5193}
5194
5195inline
5196unsigned char& Sequence2::element2()
5197{
5198 return d_element2;
5199}
5200
5201inline
5203{
5204 return d_element3;
5205}
5206
5207inline
5209{
5210 return d_element4;
5211}
5212
5213inline
5215{
5216 return d_element5;
5217}
5218
5219inline
5224
5225inline
5230
5231// ACCESSORS
5232template <class ACCESSOR>
5233int Sequence2::accessAttributes(ACCESSOR& accessor) const
5234{
5235 int ret;
5236
5237 ret = accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
5238 if (ret) {
5239 return ret;
5240 }
5241
5242 ret = accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
5243 if (ret) {
5244 return ret;
5245 }
5246
5247 ret = accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
5248 if (ret) {
5249 return ret;
5250 }
5251
5252 ret = accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
5253 if (ret) {
5254 return ret;
5255 }
5256
5257 ret = accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
5258 if (ret) {
5259 return ret;
5260 }
5261
5262 ret = accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
5263 if (ret) {
5264 return ret;
5265 }
5266
5267 ret = accessor(d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
5268 if (ret) {
5269 return ret;
5270 }
5271
5272 return 0;
5273}
5274
5275template <class ACCESSOR>
5276int Sequence2::accessAttribute(ACCESSOR& accessor, int id) const
5277{
5278 enum { NOT_FOUND = -1 };
5279
5280 switch (id) {
5281 case ATTRIBUTE_ID_ELEMENT1: {
5282 return accessor(d_element1, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT1]);
5283 }
5284 case ATTRIBUTE_ID_ELEMENT2: {
5285 return accessor(d_element2, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT2]);
5286 }
5287 case ATTRIBUTE_ID_ELEMENT3: {
5288 return accessor(d_element3, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT3]);
5289 }
5290 case ATTRIBUTE_ID_ELEMENT4: {
5291 return accessor(d_element4, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT4]);
5292 }
5293 case ATTRIBUTE_ID_ELEMENT5: {
5294 return accessor(d_element5, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT5]);
5295 }
5296 case ATTRIBUTE_ID_ELEMENT6: {
5297 return accessor(d_element6, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT6]);
5298 }
5299 case ATTRIBUTE_ID_ELEMENT7: {
5300 return accessor(d_element7, ATTRIBUTE_INFO_ARRAY[ATTRIBUTE_INDEX_ELEMENT7]);
5301 }
5302 default:
5303 return NOT_FOUND;
5304 }
5305}
5306
5307template <class ACCESSOR>
5309 ACCESSOR& accessor,
5310 const char *name,
5311 int nameLength) const
5312{
5313 enum { NOT_FOUND = -1 };
5314
5315 const bdlat_AttributeInfo *attributeInfo =
5316 lookupAttributeInfo(name, nameLength);
5317 if (0 == attributeInfo) {
5318 return NOT_FOUND;
5319 }
5320
5321 return accessAttribute(accessor, attributeInfo->d_id);
5322}
5323
5324inline
5326{
5327 return d_element1;
5328}
5329
5330inline
5331unsigned char Sequence2::element2() const
5332{
5333 return d_element2;
5334}
5335
5336inline
5338{
5339 return d_element3;
5340}
5341
5342inline
5344{
5345 return d_element4;
5346}
5347
5348inline
5350{
5351 return d_element5;
5352}
5353
5354inline
5356{
5357 return d_element6;
5358}
5359
5360inline
5362{
5363 return d_element7;
5364}
5365
5366} // close package namespace
5367
5368// FREE FUNCTIONS
5369
5370inline
5372 const s_baltst::Sequence3& lhs,
5373 const s_baltst::Sequence3& rhs)
5374{
5375 return lhs.element1() == rhs.element1()
5376 && lhs.element2() == rhs.element2()
5377 && lhs.element3() == rhs.element3()
5378 && lhs.element4() == rhs.element4()
5379 && lhs.element5() == rhs.element5()
5380 && lhs.element6() == rhs.element6();
5381}
5382
5383inline
5385 const s_baltst::Sequence3& lhs,
5386 const s_baltst::Sequence3& rhs)
5387{
5388 return !(lhs == rhs);
5389}
5390
5391inline
5392bsl::ostream& s_baltst::operator<<(
5393 bsl::ostream& stream,
5394 const s_baltst::Sequence3& rhs)
5395{
5396 return rhs.print(stream, 0, -1);
5397}
5398
5399
5400inline
5402 const s_baltst::Sequence5& lhs,
5403 const s_baltst::Sequence5& rhs)
5404{
5405 return lhs.element1() == rhs.element1()
5406 && lhs.element2() == rhs.element2()
5407 && lhs.element3() == rhs.element3()
5408 && lhs.element4() == rhs.element4()
5409 && lhs.element5() == rhs.element5()
5410 && lhs.element6() == rhs.element6()
5411 && lhs.element7() == rhs.element7();
5412}
5413
5414inline
5416 const s_baltst::Sequence5& lhs,
5417 const s_baltst::Sequence5& rhs)
5418{
5419 return !(lhs == rhs);
5420}
5421
5422inline
5423bsl::ostream& s_baltst::operator<<(
5424 bsl::ostream& stream,
5425 const s_baltst::Sequence5& rhs)
5426{
5427 return rhs.print(stream, 0, -1);
5428}
5429
5430
5431inline
5433 const s_baltst::Sequence6& lhs,
5434 const s_baltst::Sequence6& rhs)
5435{
5436 return lhs.element1() == rhs.element1()
5437 && lhs.element2() == rhs.element2()
5438 && lhs.element3() == rhs.element3()
5439 && lhs.element4() == rhs.element4()
5440 && lhs.element5() == rhs.element5()
5441 && lhs.element6() == rhs.element6()
5442 && lhs.element7() == rhs.element7()
5443 && lhs.element8() == rhs.element8()
5444 && lhs.element9() == rhs.element9()
5445 && lhs.element10() == rhs.element10()
5446 && lhs.element11() == rhs.element11()
5447 && lhs.element12() == rhs.element12()
5448 && lhs.element13() == rhs.element13()
5449 && lhs.element14() == rhs.element14()
5450 && lhs.element15() == rhs.element15();
5451}
5452
5453inline
5455 const s_baltst::Sequence6& lhs,
5456 const s_baltst::Sequence6& rhs)
5457{
5458 return !(lhs == rhs);
5459}
5460
5461inline
5462bsl::ostream& s_baltst::operator<<(
5463 bsl::ostream& stream,
5464 const s_baltst::Sequence6& rhs)
5465{
5466 return rhs.print(stream, 0, -1);
5467}
5468
5469
5470inline
5472 const s_baltst::Choice3& lhs,
5473 const s_baltst::Choice3& rhs)
5474{
5475 typedef s_baltst::Choice3 Class;
5476 if (lhs.selectionId() == rhs.selectionId()) {
5477 switch (rhs.selectionId()) {
5478 case Class::SELECTION_ID_SELECTION1:
5479 return lhs.selection1() == rhs.selection1();
5480 case Class::SELECTION_ID_SELECTION2:
5481 return lhs.selection2() == rhs.selection2();
5482 case Class::SELECTION_ID_SELECTION3:
5483 return lhs.selection3() == rhs.selection3();
5484 case Class::SELECTION_ID_SELECTION4:
5485 return lhs.selection4() == rhs.selection4();
5486 default:
5487 BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == rhs.selectionId());
5488 return true;
5489 }
5490 }
5491 else {
5492 return false;
5493 }
5494}
5495
5496inline
5498 const s_baltst::Choice3& lhs,
5499 const s_baltst::Choice3& rhs)
5500{
5501 return !(lhs == rhs);
5502}
5503
5504inline
5505bsl::ostream& s_baltst::operator<<(
5506 bsl::ostream& stream,
5507 const s_baltst::Choice3& rhs)
5508{
5509 return rhs.print(stream, 0, -1);
5510}
5511
5512
5513inline
5515 const s_baltst::Choice1& lhs,
5516 const s_baltst::Choice1& rhs)
5517{
5518 typedef s_baltst::Choice1 Class;
5519 if (lhs.selectionId() == rhs.selectionId()) {
5520 switch (rhs.selectionId()) {
5521 case Class::SELECTION_ID_SELECTION1:
5522 return lhs.selection1() == rhs.selection1();
5523 case Class::SELECTION_ID_SELECTION2:
5524 return lhs.selection2() == rhs.selection2();
5525 case Class::SELECTION_ID_SELECTION3:
5526 return lhs.selection3() == rhs.selection3();
5527 case Class::SELECTION_ID_SELECTION4:
5528 return lhs.selection4() == rhs.selection4();
5529 default:
5530 BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == rhs.selectionId());
5531 return true;
5532 }
5533 }
5534 else {
5535 return false;
5536 }
5537}
5538
5539inline
5541 const s_baltst::Choice1& lhs,
5542 const s_baltst::Choice1& rhs)
5543{
5544 return !(lhs == rhs);
5545}
5546
5547inline
5548bsl::ostream& s_baltst::operator<<(
5549 bsl::ostream& stream,
5550 const s_baltst::Choice1& rhs)
5551{
5552 return rhs.print(stream, 0, -1);
5553}
5554
5555
5556inline
5558 const s_baltst::Choice2& lhs,
5559 const s_baltst::Choice2& rhs)
5560{
5561 typedef s_baltst::Choice2 Class;
5562 if (lhs.selectionId() == rhs.selectionId()) {
5563 switch (rhs.selectionId()) {
5564 case Class::SELECTION_ID_SELECTION1:
5565 return lhs.selection1() == rhs.selection1();
5566 case Class::SELECTION_ID_SELECTION2:
5567 return lhs.selection2() == rhs.selection2();
5568 case Class::SELECTION_ID_SELECTION3:
5569 return lhs.selection3() == rhs.selection3();
5570 case Class::SELECTION_ID_SELECTION4:
5571 return lhs.selection4() == rhs.selection4();
5572 default:
5573 BSLS_ASSERT(Class::SELECTION_ID_UNDEFINED == rhs.selectionId());
5574 return true;
5575 }
5576 }
5577 else {
5578 return false;
5579 }
5580}
5581
5582inline
5584 const s_baltst::Choice2& lhs,
5585 const s_baltst::Choice2& rhs)
5586{
5587 return !(lhs == rhs);
5588}
5589
5590inline
5591bsl::ostream& s_baltst::operator<<(
5592 bsl::ostream& stream,
5593 const s_baltst::Choice2& rhs)
5594{
5595 return rhs.print(stream, 0, -1);
5596}
5597
5598
5599inline
5601 const s_baltst::Sequence4& lhs,
5602 const s_baltst::Sequence4& rhs)
5603{
5604 return lhs.element1() == rhs.element1()
5605 && lhs.element2() == rhs.element2()
5606 && lhs.element3() == rhs.element3()
5607 && lhs.element4() == rhs.element4()
5608 && lhs.element5() == rhs.element5()
5609 && lhs.element6() == rhs.element6()
5610 && lhs.element7() == rhs.element7()
5611 && lhs.element8() == rhs.element8()
5612 && lhs.element9() == rhs.element9()
5613 && lhs.element10() == rhs.element10()
5614 && lhs.element11() == rhs.element11()
5615 && lhs.element12() == rhs.element12()
5616 && lhs.element13() == rhs.element13()
5617 && lhs.element14() == rhs.element14()
5618 && lhs.element15() == rhs.element15()
5619 && lhs.element16() == rhs.element16()
5620 && lhs.element17() == rhs.element17()
5621 && lhs.element18() == rhs.element18()
5622 && lhs.element19() == rhs.element19();
5623}
5624
5625inline
5627 const s_baltst::Sequence4& lhs,
5628 const s_baltst::Sequence4& rhs)
5629{
5630 return !(lhs == rhs);
5631}
5632
5633inline
5634bsl::ostream& s_baltst::operator<<(
5635 bsl::ostream& stream,
5636 const s_baltst::Sequence4& rhs)
5637{
5638 return rhs.print(stream, 0, -1);
5639}
5640
5641
5642inline
5644 const s_baltst::Sequence1& lhs,
5645 const s_baltst::Sequence1& rhs)
5646{
5647 return lhs.element1() == rhs.element1()
5648 && lhs.element2() == rhs.element2()
5649 && lhs.element3() == rhs.element3()
5650 && lhs.element4() == rhs.element4()
5651 && lhs.element5() == rhs.element5();
5652}
5653
5654inline
5656 const s_baltst::Sequence1& lhs,
5657 const s_baltst::Sequence1& rhs)
5658{
5659 return !(lhs == rhs);
5660}
5661
5662inline
5663bsl::ostream& s_baltst::operator<<(
5664 bsl::ostream& stream,
5665 const s_baltst::Sequence1& rhs)
5666{
5667 return rhs.print(stream, 0, -1);
5668}
5669
5670
5671inline
5673 const s_baltst::Sequence2& lhs,
5674 const s_baltst::Sequence2& rhs)
5675{
5676 return lhs.element1() == rhs.element1()
5677 && lhs.element2() == rhs.element2()
5678 && lhs.element3() == rhs.element3()
5679 && lhs.element4() == rhs.element4()
5680 && lhs.element5() == rhs.element5()
5681 && lhs.element6() == rhs.element6()
5682 && lhs.element7() == rhs.element7();
5683}
5684
5685inline
5687 const s_baltst::Sequence2& lhs,
5688 const s_baltst::Sequence2& rhs)
5689{
5690 return !(lhs == rhs);
5691}
5692
5693inline
5694bsl::ostream& s_baltst::operator<<(
5695 bsl::ostream& stream,
5696 const s_baltst::Sequence2& rhs)
5697{
5698 return rhs.print(stream, 0, -1);
5699}
5700
5701
5702#endif
5703
5704// GENERATED BY @BLP_BAS_CODEGEN_VERSION@
5705// USING bas_codegen.pl s_baltst_ratsnest.xsd --mode msg --includedir . --msgComponent ratsnest --noRecurse --noExternalization --noHashSupport --noAggregateConversion
5706// ----------------------------------------------------------------------------
5707// NOTICE:
5708// Copyright 2022 Bloomberg Finance L.P. All rights reserved.
5709// Property of Bloomberg Finance L.P. (BFLP)
5710// This software is made available solely pursuant to the
5711// terms of a BFLP license agreement which governs its use.
5712// ------------------------------- END-OF-FILE --------------------------------
5713
5714/** @} */
5715/** @} */
5716/** @} */
Definition bdlb_nullableallocatedvalue.h:174
Definition bdlb_nullablevalue.h:257
Definition bdlt_datetimetz.h:308
Definition bslstl_string.h:1281
Definition bslstl_vector.h:1025
Definition bslma_allocator.h:457
Definition s_baltst_ratsnest.h:1267
bool isSelection4Value() const
Definition s_baltst_ratsnest.h:4081
@ SELECTION_INDEX_SELECTION1
Definition s_baltst_ratsnest.h:1296
@ SELECTION_INDEX_SELECTION2
Definition s_baltst_ratsnest.h:1297
@ SELECTION_INDEX_SELECTION4
Definition s_baltst_ratsnest.h:1299
@ SELECTION_INDEX_SELECTION3
Definition s_baltst_ratsnest.h:1298
bool isUndefinedValue() const
Definition s_baltst_ratsnest.h:4087
Choice2 & makeSelection4()
Choice2 & selection4()
Definition s_baltst_ratsnest.h:3999
bsls::ObjectBuffer< int > d_selection1
Definition s_baltst_ratsnest.h:1271
bool isSelection1Value() const
Definition s_baltst_ratsnest.h:4063
int & makeSelection1(int value)
Sequence4 & selection3()
Definition s_baltst_ratsnest.h:3992
@ NUM_SELECTIONS
Definition s_baltst_ratsnest.h:1292
@ SELECTION_ID_SELECTION1
Definition s_baltst_ratsnest.h:1285
@ SELECTION_ID_SELECTION3
Definition s_baltst_ratsnest.h:1287
@ SELECTION_ID_UNDEFINED
Definition s_baltst_ratsnest.h:1284
@ SELECTION_ID_SELECTION4
Definition s_baltst_ratsnest.h:1288
@ SELECTION_ID_SELECTION2
Definition s_baltst_ratsnest.h:1286
double & selection2()
Definition s_baltst_ratsnest.h:3985
bsls::ObjectBuffer< double > d_selection2
Definition s_baltst_ratsnest.h:1272
Choice2 & makeSelection4(const Choice2 &value)
Choice2 * d_selection4
Definition s_baltst_ratsnest.h:1274
int manipulateSelection(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:3956
int makeSelection(const char *name, int nameLength)
Sequence4 & makeSelection3()
int & selection1()
Definition s_baltst_ratsnest.h:3978
const char * selectionName() const
Return the symbolic name of the current selection of this object.
Choice1 & operator=(const Choice1 &rhs)
Assign to this object the value of the specified rhs object.
int accessSelection(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:4013
int & makeSelection1()
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Choice1(bslma::Allocator *basicAllocator=0)
Definition s_baltst_ratsnest.h:3942
Sequence4 & makeSelection3(const Sequence4 &value)
~Choice1()
Destroy this object.
Definition s_baltst_ratsnest.h:3949
int makeSelection(int selectionId)
static const bdlat_SelectionInfo SELECTION_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:1305
static const bdlat_SelectionInfo * lookupSelectionInfo(int id)
double & makeSelection2(double value)
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:1303
static const bdlat_SelectionInfo * lookupSelectionInfo(const char *name, int nameLength)
double & makeSelection2()
Sequence4 * d_selection3
Definition s_baltst_ratsnest.h:1273
bool isSelection2Value() const
Definition s_baltst_ratsnest.h:4069
Choice1(const Choice1 &original, bslma::Allocator *basicAllocator=0)
int selectionId() const
Definition s_baltst_ratsnest.h:4007
bool isSelection3Value() const
Definition s_baltst_ratsnest.h:4075
Definition s_baltst_ratsnest.h:1546
bool isUndefinedValue() const
Definition s_baltst_ratsnest.h:4245
Choice2(bslma::Allocator *basicAllocator=0)
Definition s_baltst_ratsnest.h:4100
unsigned int & makeSelection4()
@ SELECTION_INDEX_SELECTION3
Definition s_baltst_ratsnest.h:1577
@ SELECTION_INDEX_SELECTION1
Definition s_baltst_ratsnest.h:1575
@ SELECTION_INDEX_SELECTION2
Definition s_baltst_ratsnest.h:1576
@ SELECTION_INDEX_SELECTION4
Definition s_baltst_ratsnest.h:1578
const char * selectionName() const
Return the symbolic name of the current selection of this object.
Choice2 & operator=(const Choice2 &rhs)
Assign to this object the value of the specified rhs object.
@ NUM_SELECTIONS
Definition s_baltst_ratsnest.h:1571
@ SELECTION_ID_UNDEFINED
Definition s_baltst_ratsnest.h:1563
@ SELECTION_ID_SELECTION1
Definition s_baltst_ratsnest.h:1564
@ SELECTION_ID_SELECTION2
Definition s_baltst_ratsnest.h:1565
@ SELECTION_ID_SELECTION4
Definition s_baltst_ratsnest.h:1567
@ SELECTION_ID_SELECTION3
Definition s_baltst_ratsnest.h:1566
bsl::string & makeSelection2()
unsigned int & selection4()
Definition s_baltst_ratsnest.h:4157
static const bdlat_SelectionInfo * lookupSelectionInfo(int id)
int selectionId() const
Definition s_baltst_ratsnest.h:4165
static const bdlat_SelectionInfo * lookupSelectionInfo(const char *name, int nameLength)
unsigned int & makeSelection4(unsigned int value)
bsls::ObjectBuffer< unsigned int > d_selection4
Definition s_baltst_ratsnest.h:1553
Choice2(const Choice2 &original, bslma::Allocator *basicAllocator=0)
bsl::string & selection2()
Definition s_baltst_ratsnest.h:4143
Choice1 * d_selection3
Definition s_baltst_ratsnest.h:1552
Choice1 & makeSelection3(const Choice1 &value)
bool & makeSelection1()
int makeSelection(int selectionId)
int makeSelection(const char *name, int nameLength)
bool isSelection3Value() const
Definition s_baltst_ratsnest.h:4233
static const bdlat_SelectionInfo SELECTION_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:1584
int manipulateSelection(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:4114
int accessSelection(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:4171
Choice1 & selection3()
Definition s_baltst_ratsnest.h:4150
bsl::string & makeSelection2(const bsl::string &value)
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
bool & makeSelection1(bool value)
Choice1 & makeSelection3()
~Choice2()
Destroy this object.
Definition s_baltst_ratsnest.h:4107
bool isSelection4Value() const
Definition s_baltst_ratsnest.h:4239
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:1582
bsls::ObjectBuffer< bool > d_selection1
Definition s_baltst_ratsnest.h:1550
bsls::ObjectBuffer< bsl::string > d_selection2
Definition s_baltst_ratsnest.h:1551
bool & selection1()
Definition s_baltst_ratsnest.h:4136
bool isSelection2Value() const
Definition s_baltst_ratsnest.h:4227
bool isSelection1Value() const
Definition s_baltst_ratsnest.h:4221
Definition s_baltst_ratsnest.h:984
bsls::ObjectBuffer< s_baltst::CustomInt > d_selection4
Definition s_baltst_ratsnest.h:991
Sequence6 & makeSelection1()
s_baltst::CustomString & selection3()
Definition s_baltst_ratsnest.h:3834
~Choice3()
Destroy this object.
Definition s_baltst_ratsnest.h:3791
Sequence6 & selection1()
Definition s_baltst_ratsnest.h:3820
s_baltst::CustomString & makeSelection3(const s_baltst::CustomString &value)
int accessSelection(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:3855
static const bdlat_SelectionInfo SELECTION_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:1022
Sequence6 & makeSelection1(const Sequence6 &value)
unsigned char & selection2()
Definition s_baltst_ratsnest.h:3827
s_baltst::CustomInt & selection4()
Definition s_baltst_ratsnest.h:3841
Choice3(bslma::Allocator *basicAllocator=0)
Definition s_baltst_ratsnest.h:3784
bool isSelection3Value() const
Definition s_baltst_ratsnest.h:3917
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:1020
int makeSelection(int selectionId)
unsigned char & makeSelection2()
int makeSelection(const char *name, int nameLength)
int manipulateSelection(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:3798
bool isSelection2Value() const
Definition s_baltst_ratsnest.h:3911
Choice3 & operator=(const Choice3 &rhs)
Assign to this object the value of the specified rhs object.
bsls::ObjectBuffer< s_baltst::CustomString > d_selection3
Definition s_baltst_ratsnest.h:990
bool isSelection1Value() const
Definition s_baltst_ratsnest.h:3905
bsls::ObjectBuffer< Sequence6 > d_selection1
Definition s_baltst_ratsnest.h:988
bsls::ObjectBuffer< unsigned char > d_selection2
Definition s_baltst_ratsnest.h:989
const char * selectionName() const
Return the symbolic name of the current selection of this object.
s_baltst::CustomInt & makeSelection4()
bool isUndefinedValue() const
Definition s_baltst_ratsnest.h:3929
int selectionId() const
Definition s_baltst_ratsnest.h:3849
@ NUM_SELECTIONS
Definition s_baltst_ratsnest.h:1009
@ SELECTION_ID_SELECTION3
Definition s_baltst_ratsnest.h:1004
@ SELECTION_ID_SELECTION4
Definition s_baltst_ratsnest.h:1005
@ SELECTION_ID_UNDEFINED
Definition s_baltst_ratsnest.h:1001
@ SELECTION_ID_SELECTION2
Definition s_baltst_ratsnest.h:1003
@ SELECTION_ID_SELECTION1
Definition s_baltst_ratsnest.h:1002
Choice3(const Choice3 &original, bslma::Allocator *basicAllocator=0)
static const bdlat_SelectionInfo * lookupSelectionInfo(const char *name, int nameLength)
@ SELECTION_INDEX_SELECTION4
Definition s_baltst_ratsnest.h:1016
@ SELECTION_INDEX_SELECTION3
Definition s_baltst_ratsnest.h:1015
@ SELECTION_INDEX_SELECTION1
Definition s_baltst_ratsnest.h:1013
@ SELECTION_INDEX_SELECTION2
Definition s_baltst_ratsnest.h:1014
unsigned char & makeSelection2(unsigned char value)
s_baltst::CustomString & makeSelection3()
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
s_baltst::CustomInt & makeSelection4(const s_baltst::CustomInt &value)
bool isSelection4Value() const
Definition s_baltst_ratsnest.h:3923
static const bdlat_SelectionInfo * lookupSelectionInfo(int id)
Definition s_baltst_customint.h:65
Definition s_baltst_customstring.h:71
Definition s_baltst_ratsnest.h:2224
bsl::vector< bdlb::NullableValue< Choice1 > > & element4()
Definition s_baltst_ratsnest.h:4968
@ ATTRIBUTE_ID_ELEMENT4
Definition s_baltst_ratsnest.h:2240
@ ATTRIBUTE_ID_ELEMENT1
Definition s_baltst_ratsnest.h:2237
@ ATTRIBUTE_ID_ELEMENT2
Definition s_baltst_ratsnest.h:2238
@ ATTRIBUTE_ID_ELEMENT3
Definition s_baltst_ratsnest.h:2239
@ ATTRIBUTE_ID_ELEMENT5
Definition s_baltst_ratsnest.h:2241
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:2257
bsl::vector< Choice3 > & element5()
Definition s_baltst_ratsnest.h:4974
bdlb::NullableValue< Choice3 > & element1()
Definition s_baltst_ratsnest.h:4949
Choice2 & element3()
Definition s_baltst_ratsnest.h:4961
int manipulateAttribute(MANIPULATOR &manipulator, int id)
Definition s_baltst_ratsnest.h:4905
int accessAttribute(ACCESSOR &accessor, int id) const
Definition s_baltst_ratsnest.h:5015
int accessAttributes(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:4981
@ NUM_ATTRIBUTES
Definition s_baltst_ratsnest.h:2245
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:2259
int manipulateAttributes(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:4871
Sequence1 & operator=(const Sequence1 &rhs)
Assign to this object the value of the specified rhs object.
~Sequence1()
Destroy this object.
static const bdlat_AttributeInfo * lookupAttributeInfo(int id)
Sequence1(const Sequence1 &original, bslma::Allocator *basicAllocator=0)
@ ATTRIBUTE_INDEX_ELEMENT5
Definition s_baltst_ratsnest.h:2253
@ ATTRIBUTE_INDEX_ELEMENT3
Definition s_baltst_ratsnest.h:2251
@ ATTRIBUTE_INDEX_ELEMENT1
Definition s_baltst_ratsnest.h:2249
@ ATTRIBUTE_INDEX_ELEMENT4
Definition s_baltst_ratsnest.h:2252
@ ATTRIBUTE_INDEX_ELEMENT2
Definition s_baltst_ratsnest.h:2250
Sequence1(bslma::Allocator *basicAllocator=0)
bsl::vector< Choice1 > & element2()
Definition s_baltst_ratsnest.h:4955
static const bdlat_AttributeInfo * lookupAttributeInfo(const char *name, int nameLength)
Definition s_baltst_ratsnest.h:2474
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:2512
Sequence2(const Sequence2 &original, bslma::Allocator *basicAllocator=0)
~Sequence2()
Destroy this object.
bdlt::DatetimeTz & element3()
Definition s_baltst_ratsnest.h:5202
int accessAttribute(ACCESSOR &accessor, int id) const
Definition s_baltst_ratsnest.h:5276
static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:2514
static const bdlat_AttributeInfo * lookupAttributeInfo(int id)
bsl::vector< bdlb::NullableValue< s_baltst::CustomString > > & element7()
Definition s_baltst_ratsnest.h:5226
int manipulateAttribute(MANIPULATOR &manipulator, int id)
Definition s_baltst_ratsnest.h:5141
@ NUM_ATTRIBUTES
Definition s_baltst_ratsnest.h:2498
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Sequence2(bslma::Allocator *basicAllocator=0)
static const bdlat_AttributeInfo * lookupAttributeInfo(const char *name, int nameLength)
bsl::vector< bdlb::NullableValue< bsl::string > > & element6()
Definition s_baltst_ratsnest.h:5220
@ ATTRIBUTE_ID_ELEMENT3
Definition s_baltst_ratsnest.h:2490
@ ATTRIBUTE_ID_ELEMENT1
Definition s_baltst_ratsnest.h:2488
@ ATTRIBUTE_ID_ELEMENT4
Definition s_baltst_ratsnest.h:2491
@ ATTRIBUTE_ID_ELEMENT2
Definition s_baltst_ratsnest.h:2489
@ ATTRIBUTE_ID_ELEMENT5
Definition s_baltst_ratsnest.h:2492
@ ATTRIBUTE_ID_ELEMENT6
Definition s_baltst_ratsnest.h:2493
@ ATTRIBUTE_ID_ELEMENT7
Definition s_baltst_ratsnest.h:2494
int manipulateAttributes(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:5098
Sequence2 & operator=(const Sequence2 &rhs)
Assign to this object the value of the specified rhs object.
int accessAttributes(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:5233
@ ATTRIBUTE_INDEX_ELEMENT7
Definition s_baltst_ratsnest.h:2508
@ ATTRIBUTE_INDEX_ELEMENT6
Definition s_baltst_ratsnest.h:2507
@ ATTRIBUTE_INDEX_ELEMENT5
Definition s_baltst_ratsnest.h:2506
@ ATTRIBUTE_INDEX_ELEMENT3
Definition s_baltst_ratsnest.h:2504
@ ATTRIBUTE_INDEX_ELEMENT1
Definition s_baltst_ratsnest.h:2502
@ ATTRIBUTE_INDEX_ELEMENT4
Definition s_baltst_ratsnest.h:2505
@ ATTRIBUTE_INDEX_ELEMENT2
Definition s_baltst_ratsnest.h:2503
bdlb::NullableValue< double > & element5()
Definition s_baltst_ratsnest.h:5214
s_baltst::CustomString & element1()
Definition s_baltst_ratsnest.h:5190
bdlb::NullableValue< Choice1 > & element4()
Definition s_baltst_ratsnest.h:5208
unsigned char & element2()
Definition s_baltst_ratsnest.h:5196
Definition s_baltst_ratsnest.h:95
bsl::vector< s_baltst::Enumerated::Value > & element1()
Definition s_baltst_ratsnest.h:2835
int manipulateAttribute(MANIPULATOR &manipulator, int id)
Definition s_baltst_ratsnest.h:2789
bsl::vector< bdlb::NullableValue< s_baltst::Enumerated::Value > > & element6()
Definition s_baltst_ratsnest.h:2865
bdlb::NullableAllocatedValue< Sequence5 > & element5()
Definition s_baltst_ratsnest.h:2859
~Sequence3()
Destroy this object.
Sequence3(const Sequence3 &original, bslma::Allocator *basicAllocator=0)
static const bdlat_AttributeInfo * lookupAttributeInfo(const char *name, int nameLength)
bsl::vector< bsl::string > & element2()
Definition s_baltst_ratsnest.h:2841
@ ATTRIBUTE_INDEX_ELEMENT4
Definition s_baltst_ratsnest.h:124
@ ATTRIBUTE_INDEX_ELEMENT3
Definition s_baltst_ratsnest.h:123
@ ATTRIBUTE_INDEX_ELEMENT2
Definition s_baltst_ratsnest.h:122
@ ATTRIBUTE_INDEX_ELEMENT5
Definition s_baltst_ratsnest.h:125
@ ATTRIBUTE_INDEX_ELEMENT1
Definition s_baltst_ratsnest.h:121
@ ATTRIBUTE_INDEX_ELEMENT6
Definition s_baltst_ratsnest.h:126
Sequence3 & operator=(const Sequence3 &rhs)
Assign to this object the value of the specified rhs object.
@ ATTRIBUTE_ID_ELEMENT3
Definition s_baltst_ratsnest.h:110
@ ATTRIBUTE_ID_ELEMENT6
Definition s_baltst_ratsnest.h:113
@ ATTRIBUTE_ID_ELEMENT4
Definition s_baltst_ratsnest.h:111
@ ATTRIBUTE_ID_ELEMENT2
Definition s_baltst_ratsnest.h:109
@ ATTRIBUTE_ID_ELEMENT5
Definition s_baltst_ratsnest.h:112
@ ATTRIBUTE_ID_ELEMENT1
Definition s_baltst_ratsnest.h:108
static const bdlat_AttributeInfo * lookupAttributeInfo(int id)
int accessAttributes(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:2872
static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:132
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:130
Sequence3(bslma::Allocator *basicAllocator=0)
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
int accessAttribute(ACCESSOR &accessor, int id) const
Definition s_baltst_ratsnest.h:2910
bdlb::NullableValue< bool > & element3()
Definition s_baltst_ratsnest.h:2847
@ NUM_ATTRIBUTES
Definition s_baltst_ratsnest.h:117
int manipulateAttributes(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:2751
bdlb::NullableValue< bsl::string > & element4()
Definition s_baltst_ratsnest.h:2853
Definition s_baltst_ratsnest.h:1825
bool & element8()
Definition s_baltst_ratsnest.h:4488
int & element12()
Definition s_baltst_ratsnest.h:4512
bdlb::NullableValue< bdlt::DatetimeTz > & element5()
Definition s_baltst_ratsnest.h:4470
bsl::vector< char > & element11()
Definition s_baltst_ratsnest.h:4506
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
double & element10()
Definition s_baltst_ratsnest.h:4500
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:1899
bdlb::NullableValue< s_baltst::Enumerated::Value > & element7()
Definition s_baltst_ratsnest.h:4482
bdlb::NullableValue< int > & element4()
Definition s_baltst_ratsnest.h:4464
s_baltst::Enumerated::Value & element13()
Definition s_baltst_ratsnest.h:4518
int accessAttributes(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:4561
bsl::vector< bdlt::DatetimeTz > & element18()
Definition s_baltst_ratsnest.h:4548
static const bdlat_AttributeInfo * lookupAttributeInfo(int id)
bsl::vector< bool > & element14()
Definition s_baltst_ratsnest.h:4524
@ ATTRIBUTE_INDEX_ELEMENT17
Definition s_baltst_ratsnest.h:1893
@ ATTRIBUTE_INDEX_ELEMENT9
Definition s_baltst_ratsnest.h:1885
@ ATTRIBUTE_INDEX_ELEMENT5
Definition s_baltst_ratsnest.h:1881
@ ATTRIBUTE_INDEX_ELEMENT6
Definition s_baltst_ratsnest.h:1882
@ ATTRIBUTE_INDEX_ELEMENT13
Definition s_baltst_ratsnest.h:1889
@ ATTRIBUTE_INDEX_ELEMENT12
Definition s_baltst_ratsnest.h:1888
@ ATTRIBUTE_INDEX_ELEMENT1
Definition s_baltst_ratsnest.h:1877
@ ATTRIBUTE_INDEX_ELEMENT2
Definition s_baltst_ratsnest.h:1878
@ ATTRIBUTE_INDEX_ELEMENT7
Definition s_baltst_ratsnest.h:1883
@ ATTRIBUTE_INDEX_ELEMENT3
Definition s_baltst_ratsnest.h:1879
@ ATTRIBUTE_INDEX_ELEMENT8
Definition s_baltst_ratsnest.h:1884
@ ATTRIBUTE_INDEX_ELEMENT14
Definition s_baltst_ratsnest.h:1890
@ ATTRIBUTE_INDEX_ELEMENT15
Definition s_baltst_ratsnest.h:1891
@ ATTRIBUTE_INDEX_ELEMENT4
Definition s_baltst_ratsnest.h:1880
@ ATTRIBUTE_INDEX_ELEMENT18
Definition s_baltst_ratsnest.h:1894
@ ATTRIBUTE_INDEX_ELEMENT16
Definition s_baltst_ratsnest.h:1892
@ ATTRIBUTE_INDEX_ELEMENT19
Definition s_baltst_ratsnest.h:1895
@ ATTRIBUTE_INDEX_ELEMENT11
Definition s_baltst_ratsnest.h:1887
@ ATTRIBUTE_INDEX_ELEMENT10
Definition s_baltst_ratsnest.h:1886
bsl::vector< Choice1 > & element2()
Definition s_baltst_ratsnest.h:4452
bdlb::NullableValue< bsl::vector< char > > & element16()
Definition s_baltst_ratsnest.h:4536
bsl::vector< int > & element17()
Definition s_baltst_ratsnest.h:4542
static const bdlat_AttributeInfo * lookupAttributeInfo(const char *name, int nameLength)
Sequence4(const Sequence4 &original, bslma::Allocator *basicAllocator=0)
int accessAttribute(ACCESSOR &accessor, int id) const
Definition s_baltst_ratsnest.h:4664
Sequence4(bslma::Allocator *basicAllocator=0)
static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:1901
bsl::vector< Sequence3 > & element1()
Definition s_baltst_ratsnest.h:4446
int manipulateAttributes(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:4258
bdlb::NullableValue< bsl::vector< char > > & element3()
Definition s_baltst_ratsnest.h:4458
bsl::vector< double > & element15()
Definition s_baltst_ratsnest.h:4530
@ ATTRIBUTE_ID_ELEMENT15
Definition s_baltst_ratsnest.h:1865
@ ATTRIBUTE_ID_ELEMENT3
Definition s_baltst_ratsnest.h:1853
@ ATTRIBUTE_ID_ELEMENT10
Definition s_baltst_ratsnest.h:1860
@ ATTRIBUTE_ID_ELEMENT18
Definition s_baltst_ratsnest.h:1868
@ ATTRIBUTE_ID_ELEMENT16
Definition s_baltst_ratsnest.h:1866
@ ATTRIBUTE_ID_ELEMENT2
Definition s_baltst_ratsnest.h:1852
@ ATTRIBUTE_ID_ELEMENT14
Definition s_baltst_ratsnest.h:1864
@ ATTRIBUTE_ID_ELEMENT19
Definition s_baltst_ratsnest.h:1869
@ ATTRIBUTE_ID_ELEMENT6
Definition s_baltst_ratsnest.h:1856
@ ATTRIBUTE_ID_ELEMENT9
Definition s_baltst_ratsnest.h:1859
@ ATTRIBUTE_ID_ELEMENT4
Definition s_baltst_ratsnest.h:1854
@ ATTRIBUTE_ID_ELEMENT11
Definition s_baltst_ratsnest.h:1861
@ ATTRIBUTE_ID_ELEMENT1
Definition s_baltst_ratsnest.h:1851
@ ATTRIBUTE_ID_ELEMENT12
Definition s_baltst_ratsnest.h:1862
@ ATTRIBUTE_ID_ELEMENT5
Definition s_baltst_ratsnest.h:1855
@ ATTRIBUTE_ID_ELEMENT17
Definition s_baltst_ratsnest.h:1867
@ ATTRIBUTE_ID_ELEMENT8
Definition s_baltst_ratsnest.h:1858
@ ATTRIBUTE_ID_ELEMENT13
Definition s_baltst_ratsnest.h:1863
@ ATTRIBUTE_ID_ELEMENT7
Definition s_baltst_ratsnest.h:1857
int manipulateAttribute(MANIPULATOR &manipulator, int id)
Definition s_baltst_ratsnest.h:4361
~Sequence4()
Destroy this object.
bsl::vector< s_baltst::CustomString > & element19()
Definition s_baltst_ratsnest.h:4554
Sequence4 & operator=(const Sequence4 &rhs)
Assign to this object the value of the specified rhs object.
bdlb::NullableValue< s_baltst::CustomString > & element6()
Definition s_baltst_ratsnest.h:4476
bsl::string & element9()
Definition s_baltst_ratsnest.h:4494
@ NUM_ATTRIBUTES
Definition s_baltst_ratsnest.h:1873
Definition s_baltst_ratsnest.h:355
@ NUM_ATTRIBUTES
Definition s_baltst_ratsnest.h:380
static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:396
int accessAttributes(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:3138
int manipulateAttributes(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:3000
bsl::vector< bdlb::NullableValue< double > > & element3()
Definition s_baltst_ratsnest.h:3107
Sequence3 & element1()
Definition s_baltst_ratsnest.h:3094
static const bdlat_AttributeInfo * lookupAttributeInfo(int id)
int accessAttribute(ACCESSOR &accessor, int id) const
Definition s_baltst_ratsnest.h:3182
Sequence5(bslma::Allocator *basicAllocator=0)
@ ATTRIBUTE_INDEX_ELEMENT4
Definition s_baltst_ratsnest.h:387
@ ATTRIBUTE_INDEX_ELEMENT1
Definition s_baltst_ratsnest.h:384
@ ATTRIBUTE_INDEX_ELEMENT5
Definition s_baltst_ratsnest.h:388
@ ATTRIBUTE_INDEX_ELEMENT7
Definition s_baltst_ratsnest.h:390
@ ATTRIBUTE_INDEX_ELEMENT2
Definition s_baltst_ratsnest.h:385
@ ATTRIBUTE_INDEX_ELEMENT6
Definition s_baltst_ratsnest.h:389
@ ATTRIBUTE_INDEX_ELEMENT3
Definition s_baltst_ratsnest.h:386
int manipulateAttribute(MANIPULATOR &manipulator, int id)
Definition s_baltst_ratsnest.h:3044
bdlb::NullableValue< bsl::vector< char > > & element4()
Definition s_baltst_ratsnest.h:3113
Sequence5(const Sequence5 &original, bslma::Allocator *basicAllocator=0)
Sequence5 & operator=(const Sequence5 &rhs)
Assign to this object the value of the specified rhs object.
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:394
bsl::vector< bdlb::NullableValue< bool > > & element2()
Definition s_baltst_ratsnest.h:3101
static const bdlat_AttributeInfo * lookupAttributeInfo(const char *name, int nameLength)
bsl::vector< bdlb::NullableAllocatedValue< Sequence3 > > & element7()
Definition s_baltst_ratsnest.h:3131
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
@ ATTRIBUTE_ID_ELEMENT6
Definition s_baltst_ratsnest.h:375
@ ATTRIBUTE_ID_ELEMENT3
Definition s_baltst_ratsnest.h:372
@ ATTRIBUTE_ID_ELEMENT5
Definition s_baltst_ratsnest.h:374
@ ATTRIBUTE_ID_ELEMENT4
Definition s_baltst_ratsnest.h:373
@ ATTRIBUTE_ID_ELEMENT1
Definition s_baltst_ratsnest.h:370
@ ATTRIBUTE_ID_ELEMENT2
Definition s_baltst_ratsnest.h:371
@ ATTRIBUTE_ID_ELEMENT7
Definition s_baltst_ratsnest.h:376
~Sequence5()
Destroy this object.
bsl::vector< bdlb::NullableValue< int > > & element5()
Definition s_baltst_ratsnest.h:3119
bsl::vector< bdlb::NullableValue< bdlt::DatetimeTz > > & element6()
Definition s_baltst_ratsnest.h:3125
Definition s_baltst_ratsnest.h:627
bsl::vector< unsigned char > & element10()
Definition s_baltst_ratsnest.h:3493
unsigned int & element4()
Definition s_baltst_ratsnest.h:3457
bsl::vector< unsigned int > & element12()
Definition s_baltst_ratsnest.h:3505
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Sequence6 & operator=(const Sequence6 &rhs)
Assign to this object the value of the specified rhs object.
bdlb::NullableValue< unsigned int > & element9()
Definition s_baltst_ratsnest.h:3487
@ ATTRIBUTE_INDEX_ELEMENT10
Definition s_baltst_ratsnest.h:680
@ ATTRIBUTE_INDEX_ELEMENT13
Definition s_baltst_ratsnest.h:683
@ ATTRIBUTE_INDEX_ELEMENT11
Definition s_baltst_ratsnest.h:681
@ ATTRIBUTE_INDEX_ELEMENT7
Definition s_baltst_ratsnest.h:677
@ ATTRIBUTE_INDEX_ELEMENT4
Definition s_baltst_ratsnest.h:674
@ ATTRIBUTE_INDEX_ELEMENT9
Definition s_baltst_ratsnest.h:679
@ ATTRIBUTE_INDEX_ELEMENT8
Definition s_baltst_ratsnest.h:678
@ ATTRIBUTE_INDEX_ELEMENT12
Definition s_baltst_ratsnest.h:682
@ ATTRIBUTE_INDEX_ELEMENT3
Definition s_baltst_ratsnest.h:673
@ ATTRIBUTE_INDEX_ELEMENT6
Definition s_baltst_ratsnest.h:676
@ ATTRIBUTE_INDEX_ELEMENT5
Definition s_baltst_ratsnest.h:675
@ ATTRIBUTE_INDEX_ELEMENT1
Definition s_baltst_ratsnest.h:671
@ ATTRIBUTE_INDEX_ELEMENT2
Definition s_baltst_ratsnest.h:672
@ ATTRIBUTE_INDEX_ELEMENT14
Definition s_baltst_ratsnest.h:684
@ ATTRIBUTE_INDEX_ELEMENT15
Definition s_baltst_ratsnest.h:685
bsl::vector< s_baltst::CustomInt > & element14()
Definition s_baltst_ratsnest.h:3517
@ NUM_ATTRIBUTES
Definition s_baltst_ratsnest.h:667
bsl::vector< s_baltst::CustomString > & element11()
Definition s_baltst_ratsnest.h:3499
int manipulateAttributes(MANIPULATOR &manipulator)
Definition s_baltst_ratsnest.h:3283
s_baltst::CustomInt & element8()
Definition s_baltst_ratsnest.h:3481
int accessAttribute(ACCESSOR &accessor, int id) const
Definition s_baltst_ratsnest.h:3613
static const bdlat_AttributeInfo * lookupAttributeInfo(const char *name, int nameLength)
s_baltst::CustomString & element7()
Definition s_baltst_ratsnest.h:3475
bsl::vector< bdlb::NullableValue< s_baltst::CustomInt > > & element6()
Definition s_baltst_ratsnest.h:3469
int accessAttributes(ACCESSOR &accessor) const
Definition s_baltst_ratsnest.h:3530
@ ATTRIBUTE_ID_ELEMENT5
Definition s_baltst_ratsnest.h:653
@ ATTRIBUTE_ID_ELEMENT15
Definition s_baltst_ratsnest.h:663
@ ATTRIBUTE_ID_ELEMENT2
Definition s_baltst_ratsnest.h:650
@ ATTRIBUTE_ID_ELEMENT12
Definition s_baltst_ratsnest.h:660
@ ATTRIBUTE_ID_ELEMENT3
Definition s_baltst_ratsnest.h:651
@ ATTRIBUTE_ID_ELEMENT9
Definition s_baltst_ratsnest.h:657
@ ATTRIBUTE_ID_ELEMENT11
Definition s_baltst_ratsnest.h:659
@ ATTRIBUTE_ID_ELEMENT13
Definition s_baltst_ratsnest.h:661
@ ATTRIBUTE_ID_ELEMENT8
Definition s_baltst_ratsnest.h:656
@ ATTRIBUTE_ID_ELEMENT7
Definition s_baltst_ratsnest.h:655
@ ATTRIBUTE_ID_ELEMENT10
Definition s_baltst_ratsnest.h:658
@ ATTRIBUTE_ID_ELEMENT14
Definition s_baltst_ratsnest.h:662
@ ATTRIBUTE_ID_ELEMENT6
Definition s_baltst_ratsnest.h:654
@ ATTRIBUTE_ID_ELEMENT1
Definition s_baltst_ratsnest.h:649
@ ATTRIBUTE_ID_ELEMENT4
Definition s_baltst_ratsnest.h:652
bsl::vector< bdlb::NullableValue< unsigned char > > & element13()
Definition s_baltst_ratsnest.h:3511
~Sequence6()
Destroy this object.
bdlb::NullableValue< s_baltst::CustomInt > & element3()
Definition s_baltst_ratsnest.h:3451
Sequence6(bslma::Allocator *basicAllocator=0)
bsl::vector< bdlb::NullableValue< unsigned int > > & element15()
Definition s_baltst_ratsnest.h:3523
Sequence6(const Sequence6 &original, bslma::Allocator *basicAllocator=0)
static const char CLASS_NAME[]
Definition s_baltst_ratsnest.h:689
static const bdlat_AttributeInfo * lookupAttributeInfo(int id)
static const bdlat_AttributeInfo ATTRIBUTE_INFO_ARRAY[]
Definition s_baltst_ratsnest.h:691
int manipulateAttribute(MANIPULATOR &manipulator, int id)
Definition s_baltst_ratsnest.h:3366
bdlb::NullableValue< unsigned char > & element1()
Definition s_baltst_ratsnest.h:3439
unsigned char & element5()
Definition s_baltst_ratsnest.h:3463
bdlb::NullableValue< s_baltst::CustomString > & element2()
Definition s_baltst_ratsnest.h:3445
#define BDLAT_DECL_CHOICE_WITH_ALLOCATOR_BITWISEMOVEABLE_TRAITS(ClassName)
Definition bdlat_typetraits.h:249
#define BDLAT_DECL_SEQUENCE_WITH_ALLOCATOR_BITWISEMOVEABLE_TRAITS(ClassName)
Definition bdlat_typetraits.h:282
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1804
#define BSLS_IDENT_RCSID(tag, str)
Definition bsls_ident.h:260
#define BSLS_IDENT_PRAGMA_ONCE
Definition bsls_ident.h:310
Definition balxml_encoderoptions.h:68
Definition s_baltst_address.h:66
bool operator!=(const Address &lhs, const Address &rhs)
bool operator==(const Address &lhs, const Address &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, const Address &rhs)
Definition bdlat_attributeinfo.h:137
int d_id
Definition bdlat_attributeinfo.h:140
Definition bdlat_selectioninfo.h:136
Value
Definition s_baltst_enumerated.h:71
Definition bsls_objectbuffer.h:276
TYPE & object()
Definition bsls_objectbuffer.h:351