BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bdlar_sequenceref.h
Go to the documentation of this file.
1/// @file bdlar_sequenceref.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bdlar_sequenceref.h -*-C++-*-
8#ifndef INCLUDED_BDLAR_SEQUENCEREF
9#define INCLUDED_BDLAR_SEQUENCEREF
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14/// @defgroup bdlar_sequenceref bdlar_sequenceref
15/// @brief Provide ...
16/// @addtogroup bdl
17/// @{
18/// @addtogroup bdlar
19/// @{
20/// @addtogroup bdlar_sequenceref
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#bdlar_sequenceref-purpose"> Purpose</a>
25/// * <a href="#bdlar_sequenceref-classes"> Classes </a>
26/// * <a href="#bdlar_sequenceref-description"> Description </a>
27///
28/// # Purpose {#bdlar_sequenceref-purpose}
29/// Provide ...
30///
31/// # Classes {#bdlar_sequenceref-classes}
32///
33/// - bdlar::SequenceRef: ...
34/// - bdlar::SequenceConstRef: ...
35///
36/// # Description {#bdlar_sequenceref-description}
37/// This component provides ...
38///
39/// @}
40/** @} */
41/** @} */
42
43/** @addtogroup bdl
44 * @{
45 */
46/** @addtogroup bdlar
47 * @{
48 */
49/** @addtogroup bdlar_sequenceref
50 * @{
51 */
52
53#include <bdlar_sequencevtable.h>
55#include <bdlar_typecategory.h>
56
58
59#include <bslmf_enableif.h>
60
61
62namespace bdlar {
63
64 // =================
65 // class SequenceRef
66 // =================
67
69 // DATA
70 void *d_object_p;
71 const SequenceVtable *d_vtable_p;
72
73 public:
74 // CREATORS
75
76 /// Create `SequenceRef` object that type erases the supplied `sequence`
77 /// object.
78 template <class t_SEQUENCE>
79 explicit SequenceRef(t_SEQUENCE& sequence,
80 typename bsl::enable_if<
81 IsSequence<t_SEQUENCE>::value>::type * = 0);
82
83 /// Create `SequenceRef` object.
84 /// \pre The behaviour is undefined unless
85 /// `objectAddress` and `vtable` point to the valid objects.
87
88 // MANIPULATORS
89
90 /// Invoke the specified `manipulator` on the (modifiable) attribute
91 /// indicated by the specified `attributeId`, supplying `manipulator` with
92 /// the corresponding attribute information structure. The supplied
93 /// `manipulator` must be a callable type that can be called as if it had
94 /// the following signature:
95 /// @code
96 /// template <class t_INFO>
97 /// int manipulator(ATTRIBUTE *refOrValue, const t_INFO& info);
98 /// @endcode
99 /// Return non-zero value if the attribute is not found, and the value
100 /// returned from the invocation of `manipulator` otherwise.
101 template <class t_MANIPULATOR>
102 int manipulateAttribute(t_MANIPULATOR& manipulator, int attributeId) const;
103
104 /// Invoke the specified `manipulator` on the (modifiable) attribute
105 /// indicated by the specified `attributeName` and `attributeNameLength`,
106 /// supplying `manipulator` with the corresponding attribute information
107 /// structure. The supplied `manipulator` must be a callable type that can
108 /// be called as if it had the following signature:
109 /// @code
110 /// template <class t_INFO>
111 /// int manipulator(ATTRIBUTE *refOrValue, const t_INFO& info);
112 /// @endcode
113 /// Return non-zero value if the attribute is not found, and the value
114 /// returned from the invocation of `manipulator` otherwise.
115 template <class t_MANIPULATOR>
116 int manipulateAttribute(t_MANIPULATOR& manipulator,
117 const char *attributeName,
118 int attributeNameLength) const;
119
120 /// Invoke the specified `manipulator` sequentially on each (modifiable)
121 /// attribute, supplying `manipulator` with the corresponding attribute
122 /// information structure until such invocation returns non-zero value.
123 /// The supplied `manipulator` must be a callable type that can be called
124 /// as if it had the following signature:
125 /// @code
126 /// template <class t_INFO>
127 /// int manipulator(ATTRIBUTE *refOrValue, const t_INFO& info);
128 /// @endcode
129 /// Return the value from the last invocation of `manipulator` (i.e., the
130 /// invocation that terminated the sequence).
131 template <class t_MANIPULATOR>
132 int manipulateAttributes(t_MANIPULATOR& manipulator) const;
133
134
135 /// Reset the referred object to the default value.
136 void reset() const;
137
138 // ACCESSORS
139
140 /// Invoke the specified `accessor` on the (non-modifiable) attribute of
141 /// the referred sequence object with the given `attributeId`, supplying
142 /// `accessor` with the corresponding attribute information structure. The
143 /// supplied `accessor` must be a callable type that can be called as if it
144 /// had the following signature:
145 /// @code
146 /// template <class t_INFO>
147 /// int accessor(const ATTRIBUTE& refOrValue, const t_INFO& info);
148 /// @endcode
149 /// Return non-zero if the attribute is not found, and the value returned
150 /// from the invocation of `accessor` otherwise.
151 template <class t_ACCESSOR>
152 int accessAttribute(t_ACCESSOR& accessor, int attributeId) const;
153
154 /// Invoke the specified `accessor` on the (non-modifiable) attribute of
155 /// the referred sequence object indicated by the specified `attributeName`
156 /// and `attributeNameLength`, supplying `accessor` with the corresponding
157 /// attribute information structure. The supplied `accessor` must be a
158 /// callable type that can be called as if it had the following signature:
159 /// @code
160 /// template <class t_INFO>
161 /// int accessor(const ATTRIBUTE& refOrValue, const t_INFO& info);
162 /// @endcode
163 /// Return non-zero value if the attribute is not found, and the value
164 /// returned from the invocation of `accessor` otherwise.
165 template <class t_ACCESSOR>
166 int accessAttribute(t_ACCESSOR& accessor,
167 const char *attributeName,
168 int attributeNameLength) const;
169
170 /// Invoke the specified `accessor` sequentially on each attribute,
171 /// supplying `accessor` with the corresponding attribute information
172 /// structure until such invocation returns a non-zero value. The supplied
173 /// `accessor` must be a callable type that can be called as if it had the
174 /// following signature:
175 /// @code
176 /// template <class t_INFO>
177 /// int accessor(const ATTRIBUTE& refOrValue, const t_INFO& info);
178 /// @endcode
179 /// Return the value from the last invocation of `accessor` (i.e., the
180 /// invocation that terminated the sequence).
181 template <class t_ACCESSOR>
182 int accessAttributes(t_ACCESSOR& accessor) const;
183
184 /// Return a pointer to the vtable.
185 const SequenceVtable *vtable() const;
186
187 /// Return `true` if the referred sequence object has an attribute with the
188 /// specified `attributeId`, and `false` otherwise.
189 bool hasAttribute(int attributeId) const;
190
191 /// Return `true` if the referred sequence object has an attribute with the
192 /// specified `attributeName` of the specified `attributeNameLength`, and
193 /// `false` otherwise.
194 bool hasAttribute(const char *attributeName,
195 int attributeNameLength) const;
196
197 /// Return a pointer to the wrapped object.
198 void *objectAddress() const;
199};
200
201 // ======================
202 // class SequenceConstRef
203 // ======================
204
206 // DATA
207 const void *d_object_p;
208 const SequenceConstVtable *d_vtable_p;
209
210 public:
211 // CREATORS
212
213 /// Create `SequenceConstRef` object that type erases the supplied
214 /// `sequence` object.
215 template <class t_SEQUENCE>
216 explicit SequenceConstRef(const t_SEQUENCE& sequence,
217 typename bsl::enable_if<
218 IsSequence<t_SEQUENCE>::value>::type * = 0);
219
220 /// Create `SequenceConstRef` object.
221 /// \pre The behaviour is undefined unless
222 /// `objectAddress` and `vtable` point to the valid objects.
225
226 /// Create `SequenceConstRef` object that wraps the same object as the
227 /// specified `object`.
228 SequenceConstRef(const SequenceRef& object); // IMPLICIT
229
230 // ACCESSORS
231
232 /// Invoke the specified `accessor` on the (non-modifiable) attribute of
233 /// the referred sequence object with the given `attributeId`, supplying
234 /// `accessor` with the corresponding attribute information structure. The
235 /// supplied `accessor` must be a callable type that can be called as if it
236 /// had the following signature:
237 /// @code
238 /// template <class t_INFO>
239 /// int accessor(const ATTRIBUTE& refOrValue, const t_INFO& info);
240 /// @endcode
241 /// Return non-zero if the attribute is not found, and the value returned
242 /// from the invocation of `accessor` otherwise.
243 template <class t_ACCESSOR>
244 int accessAttribute(t_ACCESSOR& accessor, int attributeId) const;
245
246 /// Invoke the specified `accessor` on the (non-modifiable) attribute of
247 /// the referred sequence object indicated by the specified `attributeName`
248 /// and `attributeNameLength`, supplying `accessor` with the corresponding
249 /// attribute information structure. The supplied `accessor` must be a
250 /// callable type that can be called as if it had the following signature:
251 /// @code
252 /// template <class t_INFO>
253 /// int accessor(const ATTRIBUTE& refOrValue, const t_INFO& info);
254 /// @endcode
255 /// Return non-zero value if the attribute is not found, and the value
256 /// returned from the invocation of `accessor` otherwise.
257 template <class t_ACCESSOR>
258 int accessAttribute(t_ACCESSOR& accessor,
259 const char *attributeName,
260 int attributeNameLength) const;
261
262 /// Invoke the specified `accessor` sequentially on each attribute,
263 /// supplying `accessor` with the corresponding attribute information
264 /// structure until such invocation returns a non-zero value. The supplied
265 /// `accessor` must be a callable type that can be called as if it had the
266 /// following signature:
267 /// @code
268 /// template <class t_INFO>
269 /// int accessor(const ATTRIBUTE& refOrValue, const t_INFO& info);
270 /// @endcode
271 /// Return the value from the last invocation of `accessor` (i.e., the
272 /// invocation that terminated the sequence).
273 template <class t_ACCESSOR>
274 int accessAttributes(t_ACCESSOR& accessor) const;
275
276 /// Return a pointer to the vtable.
277 const SequenceConstVtable *vtable() const;
278
279 /// Return `true` if the referred sequence object has an attribute with the
280 /// specified `attributeId`, and `false` otherwise.
281 bool hasAttribute(int attributeId) const;
282
283 /// Return `true` if the referred sequence object has an attribute with the
284 /// specified `attributeName` of the specified `attributeNameLength`, and
285 /// `false` otherwise.
286 bool hasAttribute(const char *attributeName,
287 int attributeNameLength) const;
288
289 /// Return a pointer to the wrapped object.
290 const void *objectAddress() const;
291
292 /// Return the `bdlat_TypeName::xsdName` value for the underlying object.
293 const char *xsdName(int format) const;
294};
295
296// ============================================================================
297// INLINE DEFINITIONS
298// ============================================================================
299
300 // -----------------
301 // class SequenceRef
302 // -----------------
303
304// CREATORS
305template <class t_SEQUENCE>
306inline
307SequenceRef::SequenceRef(t_SEQUENCE& sequence,
308 typename bsl::enable_if<
309 IsSequence<t_SEQUENCE>::value>::type *)
310: d_object_p(&sequence)
311, d_vtable_p(SequenceVtableUtil::getVtable<t_SEQUENCE>())
312{
313}
314
315inline
316SequenceRef::SequenceRef(void *objectAddress, const SequenceVtable *vtable)
317: d_object_p(objectAddress)
318, d_vtable_p(vtable)
319{
320}
321
322// MANIPULATORS
323template <class t_MANIPULATOR>
324inline
325int SequenceRef::manipulateAttribute(t_MANIPULATOR& manipulator,
326 int attributeId) const
327{
329 manipulatorRef(manipulator);
330 return d_vtable_p->d_manipulateAttributeById_fp(d_object_p,
331 manipulatorRef,
332 attributeId);
333}
334
335template <class t_MANIPULATOR>
336inline
337int SequenceRef::manipulateAttribute(t_MANIPULATOR& manipulator,
338 const char *attributeName,
339 int attributeNameLength) const
340{
342 manipulatorRef(manipulator);
343 return d_vtable_p->d_manipulateAttributeByName_fp(d_object_p,
344 manipulatorRef,
345 attributeName,
346 attributeNameLength);
347}
348
349template <class t_MANIPULATOR>
350inline
351int SequenceRef::manipulateAttributes(t_MANIPULATOR& manipulator) const
352{
354 manipulatorRef(manipulator);
355 return d_vtable_p->d_manipulateAttributes_fp(d_object_p, manipulatorRef);
356}
357
358inline
360{
361 return d_vtable_p->d_reset_fp(d_object_p);
362}
363
364// ACCESSORS
365template <class t_ACCESSOR>
366inline
367int SequenceRef::accessAttribute(t_ACCESSOR& accessor,
368 int attributeId) const
369{
371 accessorRef(accessor);
372 return d_vtable_p->d_const.d_accessAttributeById_fp(d_object_p,
373 accessorRef,
374 attributeId);
375}
376
377template <class t_ACCESSOR>
378inline
379int SequenceRef::accessAttribute(t_ACCESSOR& accessor,
380 const char *attributeName,
381 int attributeNameLength) const
382{
384 accessorRef(accessor);
385 return d_vtable_p->d_const.d_accessAttributeByName_fp(d_object_p,
386 accessorRef,
387 attributeName,
388 attributeNameLength);
389}
390
391template <class t_ACCESSOR>
392inline
393int SequenceRef::accessAttributes(t_ACCESSOR& accessor) const
394{
396 accessorRef(accessor);
397 return d_vtable_p->d_const.d_accessAttributes_fp(d_object_p, accessorRef);
398}
399
400inline
402{
403 return d_vtable_p;
404}
405
406inline
407bool SequenceRef::hasAttribute(int attributeId) const
408{
409 return d_vtable_p->d_const.d_hasAttributeId_fp(d_object_p, attributeId);
410}
411
412inline
413bool SequenceRef::hasAttribute(const char *attributeName,
414 int attributeNameLength) const
415{
416 return d_vtable_p->d_const.d_hasAttributeName_fp(d_object_p,
417 attributeName,
418 attributeNameLength);
419}
420
421inline
423{
424 return d_object_p;
425}
426
427// FREE FUNCTIONS
428// Customization-point functions (`bdlat_SequenceFunctions`)
429
430template <class t_MANIPULATOR>
431inline
433 t_MANIPULATOR& manipulator,
434 const char *attributeName,
435 int attributeNameLength)
436{
437 return ref->manipulateAttribute(manipulator,
438 attributeName,
439 attributeNameLength);
440}
441
442template <class t_MANIPULATOR>
443inline
445 t_MANIPULATOR& manipulator,
446 int attributeId)
447{
448 return ref->manipulateAttribute(manipulator, attributeId);
449}
450
451template <class t_MANIPULATOR>
452inline
454 t_MANIPULATOR& manipulator)
455{
456 return ref->manipulateAttributes(manipulator);
457}
458
459template <class t_ACCESSOR>
460inline
462 t_ACCESSOR& accessor,
463 const char *attributeName,
464 int attributeNameLength)
465{
466 return ref.accessAttribute(accessor, attributeName, attributeNameLength);
467}
468
469template <class t_ACCESSOR>
470inline
472 t_ACCESSOR& accessor,
473 int attributeId)
474{
475 return ref.accessAttribute(accessor, attributeId);
476}
477
478template <class t_ACCESSOR>
479inline
481 t_ACCESSOR& accessor)
482{
483 return ref.accessAttributes(accessor);
484}
485
486inline
488 const char *attributeName,
489 int attributeNameLength)
490{
491 return ref.hasAttribute(attributeName, attributeNameLength);
492}
493
494inline
495bool bdlat_sequenceHasAttribute(const SequenceRef& ref, int attributeId)
496{
497 return ref.hasAttribute(attributeId);
498}
499
500inline
502{
503 ref->reset();
504}
505
506 // ----------------------
507 // class SequenceConstRef
508 // ----------------------
509
510// CREATORS
511template <class t_SEQUENCE>
512inline
513SequenceConstRef::SequenceConstRef(const t_SEQUENCE& sequence,
514 typename bsl::enable_if<
515 IsSequence<t_SEQUENCE>::value>::type *)
516: d_object_p(&sequence)
517, d_vtable_p(SequenceVtableUtil::getConstVtable<t_SEQUENCE>())
518{
519}
520
521inline
522SequenceConstRef::SequenceConstRef(const void *objectAddress,
523 const SequenceConstVtable *vtable)
524: d_object_p(objectAddress)
525, d_vtable_p(vtable)
526{
527}
528
529inline
531: d_object_p(object.objectAddress())
532, d_vtable_p(&object.vtable()->d_const)
533{
534}
535
536// ACCESSORS
537template <class t_ACCESSOR>
538inline
539int SequenceConstRef::accessAttribute(t_ACCESSOR& accessor,
540 int attributeId) const
541{
543 accessorRef(accessor);
544 return d_vtable_p->d_accessAttributeById_fp(d_object_p,
545 accessorRef,
546 attributeId);
547}
548
549template <class t_ACCESSOR>
550inline
551int SequenceConstRef::accessAttribute(t_ACCESSOR& accessor,
552 const char *attributeName,
553 int attributeNameLength) const
554{
556 accessorRef(accessor);
557 return d_vtable_p->d_accessAttributeByName_fp(d_object_p,
558 accessorRef,
559 attributeName,
560 attributeNameLength);
561}
562
563template <class t_ACCESSOR>
564inline
565int SequenceConstRef::accessAttributes(t_ACCESSOR& accessor) const
566{
568 accessorRef(accessor);
569 return d_vtable_p->d_accessAttributes_fp(d_object_p, accessorRef);
570}
571
572inline
574{
575 return d_vtable_p;
576}
577
578inline
579bool SequenceConstRef::hasAttribute(int attributeId) const
580{
581 return d_vtable_p->d_hasAttributeId_fp(d_object_p, attributeId);
582}
583
584inline
585bool SequenceConstRef::hasAttribute(const char *attributeName,
586 int attributeNameLength) const
587{
588 return d_vtable_p->d_hasAttributeName_fp(d_object_p,
589 attributeName,
590 attributeNameLength);
591}
592
593inline
595{
596 return d_object_p;
597}
598
599inline
600const char *SequenceConstRef::xsdName(int format) const
601{
602 return d_vtable_p->d_xsdName_fp(d_object_p, format);
603}
604
605// FREE FUNCTIONS
606// Customization-point functions (`bdlat_SequenceFunctions`)
607
608template <class t_ACCESSOR>
609inline
611 t_ACCESSOR& accessor,
612 const char *attributeName,
613 int attributeNameLength)
614{
615 return ref.accessAttribute(accessor, attributeName, attributeNameLength);
616}
617
618template <class t_ACCESSOR>
619inline
621 t_ACCESSOR& accessor,
622 int attributeId)
623{
624 return ref.accessAttribute(accessor, attributeId);
625}
626
627template <class t_ACCESSOR>
628inline
630 t_ACCESSOR& accessor)
631{
632 return ref.accessAttributes(accessor);
633}
634
635inline
637 const char *attributeName,
638 int attributeNameLength)
639{
640 return ref.hasAttribute(attributeName, attributeNameLength);
641}
642
643inline
644bool bdlat_sequenceHasAttribute(const SequenceConstRef& ref, int attributeId)
645{
646 return ref.hasAttribute(attributeId);
647}
648
649inline
650const char *bdlat_TypeName_xsdName(const SequenceConstRef& ref, int format)
651{
652 return ref.xsdName(format);
653}
654
655} // close package namespace
656
658
659template <>
660struct IsSequence<bdlar::SequenceRef> : bsl::true_type {
661};
662
663template <>
664struct IsSequence<bdlar::SequenceConstRef> : bsl::true_type {
665};
666
667} // close namespace bdlat_SequenceFunctions
668
669
670#endif
671
672// ----------------------------------------------------------------------------
673// Copyright 2024 Bloomberg Finance L.P.
674//
675// Licensed under the Apache License, Version 2.0 (the "License");
676// you may not use this file except in compliance with the License.
677// You may obtain a copy of the License at
678//
679// http://www.apache.org/licenses/LICENSE-2.0
680//
681// Unless required by applicable law or agreed to in writing, software
682// distributed under the License is distributed on an "AS IS" BASIS,
683// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
684// See the License for the specific language governing permissions and
685// limitations under the License.
686// ----------------------------- END-OF-FILE ----------------------------------
687
688/** @} */
689/** @} */
690/** @} */
Definition bdlar_dynamictyperef.h:128
Definition bdlar_sequenceref.h:205
const SequenceConstVtable * vtable() const
Return a pointer to the vtable.
Definition bdlar_sequenceref.h:573
const char * xsdName(int format) const
Return the bdlat_TypeName::xsdName value for the underlying object.
Definition bdlar_sequenceref.h:600
int accessAttributes(t_ACCESSOR &accessor) const
Definition bdlar_sequenceref.h:565
const void * objectAddress() const
Return a pointer to the wrapped object.
Definition bdlar_sequenceref.h:594
int accessAttribute(t_ACCESSOR &accessor, int attributeId) const
Definition bdlar_sequenceref.h:539
SequenceConstRef(const t_SEQUENCE &sequence, typename bsl::enable_if< IsSequence< t_SEQUENCE >::value >::type *=0)
Definition bdlar_sequenceref.h:513
bool hasAttribute(int attributeId) const
Definition bdlar_sequenceref.h:579
Definition bdlar_sequenceref.h:68
int accessAttributes(t_ACCESSOR &accessor) const
Definition bdlar_sequenceref.h:393
int manipulateAttributes(t_MANIPULATOR &manipulator) const
Definition bdlar_sequenceref.h:351
const SequenceVtable * vtable() const
Return a pointer to the vtable.
Definition bdlar_sequenceref.h:401
SequenceRef(t_SEQUENCE &sequence, typename bsl::enable_if< IsSequence< t_SEQUENCE >::value >::type *=0)
Definition bdlar_sequenceref.h:307
void * objectAddress() const
Return a pointer to the wrapped object.
Definition bdlar_sequenceref.h:422
int manipulateAttribute(t_MANIPULATOR &manipulator, int attributeId) const
Definition bdlar_sequenceref.h:325
void reset() const
Reset the referred object to the default value.
Definition bdlar_sequenceref.h:359
int accessAttribute(t_ACCESSOR &accessor, int attributeId) const
Definition bdlar_sequenceref.h:367
bool hasAttribute(int attributeId) const
Definition bdlar_sequenceref.h:407
Definition bdlar_sequencevtableutil.h:65
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlar_accessorref.h:59
bool bdlat_sequenceHasAttribute(const SequenceRef &ref, const char *attributeName, int attributeNameLength)
Definition bdlar_sequenceref.h:487
int bdlat_sequenceAccessAttribute(const SequenceRef &ref, t_ACCESSOR &accessor, const char *attributeName, int attributeNameLength)
Definition bdlar_sequenceref.h:461
const char * bdlat_TypeName_xsdName(const AnyConstRef &ref, int format)
Definition bdlar_anyref.h:716
void bdlat_valueTypeReset(AnyRef *ref)
Definition bdlar_anyref.h:550
int bdlat_sequenceManipulateAttributes(SequenceRef *ref, t_MANIPULATOR &manipulator)
Definition bdlar_sequenceref.h:453
int bdlat_sequenceManipulateAttribute(SequenceRef *ref, t_MANIPULATOR &manipulator, const char *attributeName, int attributeNameLength)
Definition bdlar_sequenceref.h:432
int bdlat_sequenceAccessAttributes(const SequenceRef &ref, t_ACCESSOR &accessor)
Definition bdlar_sequenceref.h:480
Definition bdlar_sequenceref.h:657
Definition bdlar_sequencevtable.h:69
HasAttributeId * d_hasAttributeId_fp
Definition bdlar_sequencevtable.h:89
AccessAttributes * d_accessAttributes_fp
Definition bdlar_sequencevtable.h:92
HasAttributeName * d_hasAttributeName_fp
Definition bdlar_sequencevtable.h:88
XsdName * d_xsdName_fp
Definition bdlar_sequencevtable.h:93
AccessAttributeById * d_accessAttributeById_fp
Definition bdlar_sequencevtable.h:90
AccessAttributeByName * d_accessAttributeByName_fp
Definition bdlar_sequencevtable.h:91
Definition bdlar_sequencevtable.h:105
ManipulateAttributeById * d_manipulateAttributeById_fp
Definition bdlar_sequencevtable.h:121
ManipulateAttributes * d_manipulateAttributes_fp
Definition bdlar_sequencevtable.h:123
SequenceConstVtable d_const
Definition bdlar_sequencevtable.h:120
ManipulateAttributeByName * d_manipulateAttributeByName_fp
Definition bdlar_sequencevtable.h:122
Reset * d_reset_fp
Definition bdlar_sequencevtable.h:124
Definition bdlat_sequencefunctions.h:674
Definition bslmf_enableif.h:530