9#ifndef INCLUDED_BSLFMT_FORMATTERPOINTER
10#define INCLUDED_BSLFMT_FORMATTERPOINTER
95#include <bslscm_version.h>
112#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
127template <
class t_VALUE,
class t_CHAR>
136 template <
class t_FORMAT_CONTEXT>
137 typename t_FORMAT_CONTEXT::iterator
format(
139 t_FORMAT_CONTEXT& formatContext)
const;
149template <
class t_CHAR>
159 template <
class t_FORMAT_CONTEXT>
160 typename t_FORMAT_CONTEXT::iterator
format(
162 t_FORMAT_CONTEXT& formatContext)
const;
172template <
class t_CHAR>
174: BloombergLP::bslfmt::FormatterPointer_Imp<void *, t_CHAR> {
179template <
class t_CHAR>
181: BloombergLP::bslfmt::FormatterPointer_Imp<const void *, t_CHAR> {
186template <
class t_CHAR>
188: BloombergLP::bslfmt::FormatterPointer_Nullptr<t_CHAR> {
204template <
class t_VALUE,
class t_CHAR>
205template <
class t_FORMAT_CONTEXT>
207typename t_FORMAT_CONTEXT::iterator
210 t_FORMAT_CONTEXT& formatContext)
const
212 typedef BloombergLP::bslalg::NumericFormatterUtil NFUtil;
216 const Specification& parsedSpec = this->specification();
220 const int maxPrefixSize = 2;
221 char prefixBuf[maxPrefixSize];
222 char *prefixBegin = prefixBuf;
223 char *prefixEnd = prefixBegin + maxPrefixSize;
227 switch (parsedSpec.formatType()) {
228 case Specification::e_POINTER_HEX: {
231 case Specification::e_POINTER_HEX_UC: {
235 BSLS_THROW(bsl::format_error(
"Invalid pointer format type"));
246 const int maxValueSize = NFUtil::ToCharsMaxLength<UintPtr, 2>::k_VALUE;
247 t_CHAR valueBuf[maxValueSize];
248 t_CHAR *valueBegin = valueBuf;
249 t_CHAR *valueEnd = valueBuf;
251 const void *temp =
static_cast<const void *
>(ptrValue);
252 UintPtr value =
reinterpret_cast<UintPtr
>(temp);
253 valueEnd = this->formatValue(valueBuf, maxValueSize, value);
257 return this->outputValue(prefixBegin,
268template <
class t_CHAR>
269template <
class t_FORMAT_CONTEXT>
273 t_FORMAT_CONTEXT& formatContext)
const
277 const Specification& parsedSpec = this->specification();
281 const int maxPrefixSize = 2;
282 char prefixBuf[maxPrefixSize];
283 char *prefixBegin = prefixBuf;
284 char *prefixEnd = prefixBegin + maxPrefixSize;
288 switch (parsedSpec.formatType()) {
289 case Specification::e_POINTER_HEX: {
292 case Specification::e_POINTER_HEX_UC: {
296 BSLS_THROW(bsl::format_error(
"Invalid nullptr format type"));
303 t_CHAR *valueBegin = &value;
304 t_CHAR *valueEnd = valueBegin + 1;
308 return this->outputValue(prefixBegin,
#define BSLS_THROW(X)
Definition bsls_exceptionutil.h:374
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlat_valuetypefunctions.h:939
BloombergLP::bsls::Nullptr_Impl::Type nullptr_t
Definition bsls_nullptr.h:283
Definition bslfmt_enablestreamedformatter.h:130
std::size_t UintPtr
Definition bsls_types.h:128