8#ifndef INCLUDED_BDLAR_FIELDINFO
9#define INCLUDED_BDLAR_FIELDINFO
38/#include <bsls_compilerfeatures.h>
39/#include <bsls_keyword.h>
56#include <bsl_concepts.h>
61#ifdef BSLS_COMPILERFEATURES_SUPPORT_CONCEPTS
67template <
class t_TYPE>
68concept FieldInfo =
requires (t_TYPE object)
70 {
object.formattingMode() } -> bsl::convertible_to<int>;
71 {
object.id() } -> bsl::convertible_to<int>;
72 {
object.name() } -> bsl::convertible_to<const char *>;
73 {
object.nameLength() } -> bsl::convertible_to<int>;
86 typedef int Id(
const void *self);
87 typedef const char *
Name(
const void *self);
105 const void *d_target_p;
111#ifdef BSLS_COMPILERFEATURES_SUPPORT_CONCEPTS
112 template <FieldInfo t_FIELD_INFO>
115 template <
class t_FIELD_INFO>
128 const char *
name()
const;
132 const void *
target()
const;
145 template <
class t_FIELD_INFO>
146 static const char *annotation(
const void *target);
148 template <
class t_FIELD_INFO>
149 static int formattingMode(
const void *target);
151 template <
class t_FIELD_INFO>
152 static int id(
const void *target);
154 template <
class t_FIELD_INFO>
155 static const char *name(
const void *target);
157 template <
class t_FIELD_INFO>
158 static int nameLength(
const void *target);
162 template <
class t_FIELD_INFO>
175#ifdef BSLS_COMPILERFEATURES_SUPPORT_CONCEPTS
176template <FieldInfo t_FIELD_INFO>
180, d_vtable_p(FieldInfo_VtableUtil::getVtable<t_FIELD_INFO>())
184template <
class t_FIELD_INFO>
216 return (d_vtable_p->
d_id_p)(d_target_p);
222 return (d_vtable_p->
d_name_p)(d_target_p);
244template <
class t_FIELD_INFO>
245const char *FieldInfo_VtableUtil::annotation(
const void *target)
247 const t_FIELD_INFO& typedTarget =
248 *
static_cast<const t_FIELD_INFO *
>(target);
250 return typedTarget.annotation();
253template <
class t_FIELD_INFO>
254int FieldInfo_VtableUtil::formattingMode(
const void *target)
256 const t_FIELD_INFO& typedTarget =
257 *
static_cast<const t_FIELD_INFO *
>(target);
259 return typedTarget.formattingMode();
262template <
class t_FIELD_INFO>
263int FieldInfo_VtableUtil::id(
const void *target)
265 const t_FIELD_INFO& typedTarget =
266 *
static_cast<const t_FIELD_INFO *
>(target);
268 return typedTarget.id();
271template <
class t_FIELD_INFO>
272const char *FieldInfo_VtableUtil::name(
const void *target)
274 const t_FIELD_INFO& typedTarget =
275 *
static_cast<const t_FIELD_INFO *
>(target);
277 return typedTarget.name();
280template <
class t_FIELD_INFO>
281int FieldInfo_VtableUtil::nameLength(
const void *target)
283 const t_FIELD_INFO& typedTarget =
284 *
static_cast<const t_FIELD_INFO *
>(target);
286 return typedTarget.nameLength();
290template <
class t_FIELD_INFO>
294 &annotation<t_FIELD_INFO>,
295 &formattingMode<t_FIELD_INFO>,
298 &nameLength<t_FIELD_INFO>
Definition bdlar_fieldinfo.h:102
const char * name() const
Definition bdlar_fieldinfo.h:220
const void * target() const
Definition bdlar_fieldinfo.h:232
const FieldInfoVtable * vtable() const
Definition bdlar_fieldinfo.h:238
const char * annotation() const
Definition bdlar_fieldinfo.h:202
int formattingMode() const
Definition bdlar_fieldinfo.h:208
FieldInfoRef(const t_FIELD_INFO &target)
Definition bdlar_fieldinfo.h:186
int id() const
Definition bdlar_fieldinfo.h:214
int nameLength() const
Definition bdlar_fieldinfo.h:226
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
Definition bdlar_accessorref.h:59
Definition bdlar_fieldinfo.h:82
FormattingMode * d_formattingMode_p
Definition bdlar_fieldinfo.h:92
Id * d_id_p
Definition bdlar_fieldinfo.h:93
const char * Name(const void *self)
Definition bdlar_fieldinfo.h:87
int NameLength(const void *self)
Definition bdlar_fieldinfo.h:88
int FormattingMode(const void *self)
Definition bdlar_fieldinfo.h:85
const char * Annotation(const void *self)
Definition bdlar_fieldinfo.h:84
NameLength * d_nameLength_p
Definition bdlar_fieldinfo.h:95
Name * d_name_p
Definition bdlar_fieldinfo.h:94
int Id(const void *self)
Definition bdlar_fieldinfo.h:86
Annotation * d_annotation_p
Definition bdlar_fieldinfo.h:91
Definition bdlar_fieldinfo.h:141
static const FieldInfoVtable * getVtable()
Definition bdlar_fieldinfo.h:291