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