BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bdlar_accessorref.h
Go to the documentation of this file.
1/// @file bdlar_accessorref.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bdlar_accessorref.h -*-C++-*-
8#ifndef INCLUDED_BDLAR_ACCESSORREF
9#define INCLUDED_BDLAR_ACCESSORREF
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14/// @defgroup bdlar_accessorref bdlar_accessorref
15/// @brief Provide ...
16/// @addtogroup bdl
17/// @{
18/// @addtogroup bdlar
19/// @{
20/// @addtogroup bdlar_accessorref
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#bdlar_accessorref-purpose"> Purpose</a>
25/// * <a href="#bdlar_accessorref-classes"> Classes </a>
26/// * <a href="#bdlar_accessorref-description"> Description </a>
27///
28/// # Purpose {#bdlar_accessorref-purpose}
29/// Provide ...
30///
31/// # Classes {#bdlar_accessorref-classes}
32///
33/// - bdlar::AccessorRef: ...
34/// - bdlar::AccessorWithInfoRef: ...
35///
36/// # Description {#bdlar_accessorref-description}
37/// This component provides ...
38///
39/// @}
40/** @} */
41/** @} */
42
43/** @addtogroup bdl
44 * @{
45 */
46/** @addtogroup bdlar
47 * @{
48 */
49/** @addtogroup bdlar_accessorref
50 * @{
51 */
52
53#include <bdlar_accessorvtable.h>
55#include <bdlar_fieldinfo.h>
56#include <bdlar_typecategory.h>
57
58
59namespace bdlar {
60
61 // =================
62 // class AccessorRef
63 // =================
64
66 // DATA
67 const void *d_accessor_p;
68 const AccessorVtable *d_vtable_p;
69
70 // PRIVATE ACCESSORS
71 template <class t_TYPE>
72 int access(const t_TYPE& value, bdlat_TypeCategory::DynamicType) const;
73
74 template <class t_TYPE>
75 int access(const t_TYPE& value, bdlat_TypeCategory::Array) const;
76
77 template <class t_TYPE>
78 int access(const t_TYPE& value, bdlat_TypeCategory::Choice) const;
79
80 template <class t_TYPE>
81 int access(const t_TYPE& value, bdlat_TypeCategory::CustomizedType) const;
82
83 template <class t_TYPE>
84 int access(const t_TYPE& value, bdlat_TypeCategory::Enumeration) const;
85
86 template <class t_TYPE>
87 int access(const t_TYPE& value, bdlat_TypeCategory::NullableValue) const;
88
89 template <class t_TYPE>
90 int access(const t_TYPE& value, bdlat_TypeCategory::Sequence) const;
91
92 template <class t_TYPE>
93 int access(const t_TYPE& value, bdlat_TypeCategory::Simple) const;
94
95 public:
96 // CREATORS
97 template <class t_ACCESSOR>
98 explicit AccessorRef(t_ACCESSOR& accessor);
99
100 // ACCESSORS
101 template <class t_TYPE>
102 int operator()(const t_TYPE& value) const;
103};
104
105 // =========================
106 // class AccessorWithInfoRef
107 // =========================
108
110 // DATA
111 const void *d_accessor_p;
112 const AccessorWithInfoVtable *d_vtable_p;
113
114 // PRIVATE ACCESSORS
115 template <class t_TYPE>
116 int access(const t_TYPE& value,
117 const FieldInfoRef& info,
119
120 template <class t_TYPE>
121 int access(const t_TYPE& value,
122 const FieldInfoRef& info,
124
125 template <class t_TYPE>
126 int access(const t_TYPE& value,
127 const FieldInfoRef& info,
129
130 template <class t_TYPE>
131 int access(const t_TYPE& value,
132 const FieldInfoRef& info,
134
135 template <class t_TYPE>
136 int access(const t_TYPE& value,
137 const FieldInfoRef& info,
139
140 template <class t_TYPE>
141 int access(const t_TYPE& value,
142 const FieldInfoRef& info,
144
145 template <class t_TYPE>
146 int access(const t_TYPE& value,
147 const FieldInfoRef& info,
149
150 template <class t_TYPE>
151 int access(const t_TYPE& value,
152 const FieldInfoRef& info,
154
155 public:
156 // CREATORS
157 template <class t_ACCESSOR>
158 explicit AccessorWithInfoRef(t_ACCESSOR& accessor);
159
160 // ACCESSORS
161 template <class t_TYPE, class t_INFO>
162 int operator()(const t_TYPE& value, const t_INFO& info) const;
163};
164
165// ============================================================================
166// INLINE DEFINITIONS
167// ============================================================================
168
169 // -----------------
170 // class AccessorRef
171 // -----------------
172
173// CREATORS
174template <class t_ACCESSOR>
175inline
176AccessorRef::AccessorRef(t_ACCESSOR& accessor)
177: d_accessor_p(reinterpret_cast<const void *>(&accessor))
178, d_vtable_p(AccessorVtableUtil::getVtable<t_ACCESSOR>())
179{
180}
181
182// PRIVATE ACCESSORS
183template <class t_TYPE>
184inline
185int AccessorRef::access(const t_TYPE& value,
187{
189 return d_vtable_p->d_accessDynamic_fp(d_accessor_p, ref);
190}
191
192template <class t_TYPE>
193inline
194int AccessorRef::access(const t_TYPE& value, bdlat_TypeCategory::Array) const
195{
197 return d_vtable_p->d_accessArray_fp(d_accessor_p, ref);
198}
199
200template <class t_TYPE>
201inline
202int AccessorRef::access(const t_TYPE& value, bdlat_TypeCategory::Choice) const
203{
205 return d_vtable_p->d_accessChoice_fp(d_accessor_p, ref);
206}
207
208template <class t_TYPE>
209inline
210int AccessorRef::access(const t_TYPE& value,
212{
214 return d_vtable_p->d_accessCustomized_fp(d_accessor_p, ref);
215}
216
217template <class t_TYPE>
218inline
219int AccessorRef::access(const t_TYPE& value,
221{
223 return d_vtable_p->d_accessEnum_fp(d_accessor_p, ref);
224}
225
226template <class t_TYPE>
227inline
228int AccessorRef::access(const t_TYPE& value,
230{
232 return d_vtable_p->d_accessNullable_fp(d_accessor_p, ref);
233}
234
235template <class t_TYPE>
236inline
237int AccessorRef::access(const t_TYPE& value,
239{
241 return d_vtable_p->d_accessSequence_fp(d_accessor_p, ref);
242}
243
244template <class t_TYPE>
245inline
246int AccessorRef::access(const t_TYPE& value, bdlat_TypeCategory::Simple) const
247{
249 return d_vtable_p->d_accessSimple_fp(d_accessor_p, ref);
250}
251
252// ACCESSORS
253template <class t_TYPE>
254inline
255int AccessorRef::operator()(const t_TYPE& value) const
256{
257 typedef typename SelectCategory<t_TYPE>::Type TypeTag;
258 return access(value, TypeTag());
259}
260
261 // -------------------------
262 // class AccessorWithInfoRef
263 // -------------------------
264
265// CREATORS
266template <class t_ACCESSOR>
267inline
269: d_accessor_p(reinterpret_cast<const void *>(&accessor))
270, d_vtable_p(AccessorVtableUtil::getWithInfoVtable<t_ACCESSOR>())
271{
272}
273
274// PRIVATE ACCESSORS
275template <class t_TYPE>
276inline
277int AccessorWithInfoRef::access(const t_TYPE& value,
278 const FieldInfoRef& info,
280{
282 return d_vtable_p->d_accessDynamic_fp(d_accessor_p, ref, info);
283}
284
285template <class t_TYPE>
286inline
287int AccessorWithInfoRef::access(const t_TYPE& value,
288 const FieldInfoRef& info,
290{
292 return d_vtable_p->d_accessArray_fp(d_accessor_p, ref, info);
293}
294
295template <class t_TYPE>
296inline
297int AccessorWithInfoRef::access(const t_TYPE& value,
298 const FieldInfoRef& info,
300{
302 return d_vtable_p->d_accessChoice_fp(d_accessor_p, ref, info);
303}
304
305template <class t_TYPE>
306inline
307int AccessorWithInfoRef::access(const t_TYPE& value,
308 const FieldInfoRef& info,
310{
312 return d_vtable_p->d_accessCustomized_fp(d_accessor_p, ref, info);
313}
314
315template <class t_TYPE>
316inline
317int AccessorWithInfoRef::access(const t_TYPE& value,
318 const FieldInfoRef& info,
320{
322 return d_vtable_p->d_accessEnum_fp(d_accessor_p, ref, info);
323}
324
325template <class t_TYPE>
326inline
327int AccessorWithInfoRef::access(const t_TYPE& value,
328 const FieldInfoRef& info,
330{
332 return d_vtable_p->d_accessNullable_fp(d_accessor_p, ref, info);
333}
334
335template <class t_TYPE>
336inline
337int AccessorWithInfoRef::access(const t_TYPE& value,
338 const FieldInfoRef& info,
340{
342 return d_vtable_p->d_accessSequence_fp(d_accessor_p, ref, info);
343}
344
345template <class t_TYPE>
346inline
347int AccessorWithInfoRef::access(const t_TYPE& value,
348 const FieldInfoRef& info,
350{
352 return d_vtable_p->d_accessSimple_fp(d_accessor_p, ref, info);
353}
354
355// ACCESSORS
356template <class t_TYPE, class t_INFO>
357inline
358int AccessorWithInfoRef::operator()(const t_TYPE& value,
359 const t_INFO& info) const
360{
361 FieldInfoRef infoRef(info);
362 typedef typename SelectCategory<t_TYPE>::Type TypeTag;
363 return access(value, infoRef, TypeTag());
364}
365
366} // close package namespace
367
368
369#endif
370
371// ----------------------------------------------------------------------------
372// Copyright 2024 Bloomberg Finance L.P.
373//
374// Licensed under the Apache License, Version 2.0 (the "License");
375// you may not use this file except in compliance with the License.
376// You may obtain a copy of the License at
377//
378// http://www.apache.org/licenses/LICENSE-2.0
379//
380// Unless required by applicable law or agreed to in writing, software
381// distributed under the License is distributed on an "AS IS" BASIS,
382// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
383// See the License for the specific language governing permissions and
384// limitations under the License.
385// ----------------------------- END-OF-FILE ----------------------------------
386
387/** @} */
388/** @} */
389/** @} */
Definition bdlar_accessorref.h:65
AccessorRef(t_ACCESSOR &accessor)
Definition bdlar_accessorref.h:176
int operator()(const t_TYPE &value) const
Definition bdlar_accessorref.h:255
Definition bdlar_accessorvtableutil.h:62
Definition bdlar_accessorref.h:109
AccessorWithInfoRef(t_ACCESSOR &accessor)
Definition bdlar_accessorref.h:268
int operator()(const t_TYPE &value, const t_INFO &info) const
Definition bdlar_accessorref.h:358
Definition bdlar_dynamictyperef.h:128
Definition bdlar_fieldinfo.h:102
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlar_accessorref.h:59
reference_wrapper< T > ref(T &object)
Return a reference wrapper that represents the specified object.
Definition bdlar_accessorvtable.h:71
AccessChoice * d_accessChoice_fp
Definition bdlar_accessorvtable.h:90
AccessSimple * d_accessSimple_fp
Definition bdlar_accessorvtable.h:95
AccessEnum * d_accessEnum_fp
Definition bdlar_accessorvtable.h:92
AccessSequence * d_accessSequence_fp
Definition bdlar_accessorvtable.h:94
AccessDynamic * d_accessDynamic_fp
Definition bdlar_accessorvtable.h:88
AccessNullable * d_accessNullable_fp
Definition bdlar_accessorvtable.h:93
AccessCustomized * d_accessCustomized_fp
Definition bdlar_accessorvtable.h:91
AccessArray * d_accessArray_fp
Definition bdlar_accessorvtable.h:89
Definition bdlar_accessorvtable.h:102
AccessCustomized * d_accessCustomized_fp
Definition bdlar_accessorvtable.h:133
AccessNullable * d_accessNullable_fp
Definition bdlar_accessorvtable.h:135
AccessDynamic * d_accessDynamic_fp
Definition bdlar_accessorvtable.h:130
AccessSimple * d_accessSimple_fp
Definition bdlar_accessorvtable.h:137
AccessEnum * d_accessEnum_fp
Definition bdlar_accessorvtable.h:134
AccessArray * d_accessArray_fp
Definition bdlar_accessorvtable.h:131
AccessChoice * d_accessChoice_fp
Definition bdlar_accessorvtable.h:132
AccessSequence * d_accessSequence_fp
Definition bdlar_accessorvtable.h:136
t_TYPE Type
Definition bdlar_typecategory.h:190
Definition bdlat_typecategory.h:1037
Definition bdlat_typecategory.h:1038
Definition bdlat_typecategory.h:1039
Definition bdlat_typecategory.h:1036
Definition bdlat_typecategory.h:1040
Definition bdlat_typecategory.h:1041
Definition bdlat_typecategory.h:1042
Definition bdlat_typecategory.h:1043
Definition bslmf_nil.h:133