BDE 4.39.x Production Release
Loading...
Searching...
No Matches
baltzo_localdatetime.h
Go to the documentation of this file.
1/// @file baltzo_localdatetime.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// baltzo_localdatetime.h -*-C++-*-
8#ifndef INCLUDED_BALTZO_LOCALDATETIME
9#define INCLUDED_BALTZO_LOCALDATETIME
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $ $CSID: $")
13
14/// @defgroup baltzo_localdatetime baltzo_localdatetime
15/// @brief Provide an attribute class for time-zone-aware datetime values.
16/// @addtogroup bal
17/// @{
18/// @addtogroup baltzo
19/// @{
20/// @addtogroup baltzo_localdatetime
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#baltzo_localdatetime-purpose"> Purpose</a>
25/// * <a href="#baltzo_localdatetime-classes"> Classes </a>
26/// * <a href="#baltzo_localdatetime-description"> Description </a>
27/// * <a href="#baltzo_localdatetime-attributes"> Attributes </a>
28/// * <a href="#baltzo_localdatetime-usage"> Usage </a>
29/// * <a href="#baltzo_localdatetime-example-1-creation-and-use-of-a-baltzo-localdatetime-object"> Example 1: Creation and Use of a baltzo::LocalDatetime Object </a>
30///
31/// # Purpose {#baltzo_localdatetime-purpose}
32/// Provide an attribute class for time-zone-aware datetime values.
33///
34/// # Classes {#baltzo_localdatetime-classes}
35///
36/// - baltzo::LocalDatetime: time-zone-aware datetime type
37///
38/// @see bdlt_datetimetz
39///
40/// # Description {#baltzo_localdatetime-description}
41/// This component provides a single, unconstrained
42/// (value-semantic) attribute class, `baltzo::LocalDatetime`, that is used to
43/// encapsulate a date, time, offset from UTC (Coordinated Universal Time), and
44/// a time zone (string) identifier. The date, time, and offset from UTC are
45/// contained within a `bdlt::DatetimeTz` object, which together represents a
46/// wall-clock time in a given time zone. This component differs from
47/// @ref bdlt_datetimetz in that it provides, as part of the value, a string
48/// identifier for the corresponding time zone.
49///
50/// ## Attributes {#baltzo_localdatetime-attributes}
51///
52///
53///
54/// | Name | Type | Default |
55/// | ----------- | ----------------- | ---------------------------------- |
56/// | datetimeTz | bdlt::DatetimeTz | January 1, 0001, 24:00:00.000+0000 |
57/// | timeZoneId | bsl::string | "" |
58///
59/// * `datetimeTz`: date, time, and offset from UTC of the local time.
60/// * `timeZoneId`: unique identifier representing the local time zone.
61///
62/// For example, in New York on January 1, 2011, at 10 a.m. the local offset
63/// from UTC is -5 hours, and a standard time zone identifier for New York is
64/// "America/New_York". We can represent this information using a
65/// `baltzo::LocalDatetime` object whose `datetimeTz` attribute is
66/// "01JAN2011_10:00:00.000-0005" and whose `timeZoneId` attribute is
67/// "America/New_York".
68///
69/// Note that it is up to the user to ensure that the `datetimeTz` and
70/// `timeZoneId` attributes are consistent as the `baltzo::LocalDatetime` object
71/// itself does not maintain any invariants with respect to their values.
72///
73/// ## Usage {#baltzo_localdatetime-usage}
74///
75///
76/// This section illustrates intended use of this component.
77///
78/// ### Example 1: Creation and Use of a baltzo::LocalDatetime Object {#baltzo_localdatetime-example-1-creation-and-use-of-a-baltzo-localdatetime-object}
79///
80///
81/// First, we default-construct a `baltzo::LocalDatetime` object:
82/// @code
83/// baltzo::LocalDatetime localDatetime;
84/// @endcode
85/// Next, we update the time referred to by `localDatetime` to the New York
86/// time "December 25, 2009, 11:00" with the time-zone identifier set to
87/// "America/New_York":
88/// @code
89/// bdlt::Datetime datetime(2009, 12, 25, 11, 00, 00);
90/// bdlt::DatetimeTz datetimeTz(datetime, -5 * 60); // offset is specified
91/// // in minutes from UTC
92/// bsl::string timeZoneId("America/New_York");
93/// localDatetime.setDatetimeTz(datetimeTz);
94/// localDatetime.setTimeZoneId(timeZoneId);
95///
96/// assert(datetimeTz == localDatetime.datetimeTz());
97/// assert(timeZoneId == localDatetime.timeZoneId());
98/// @endcode
99/// Now, we change the time-zone identifier to another string, for example
100/// "Europe/Berlin":
101/// @code
102/// bsl::string anotherTimeZoneId("Europe/Berlin");
103/// localDatetime.setTimeZoneId(anotherTimeZoneId);
104///
105/// assert(datetimeTz == localDatetime.datetimeTz());
106/// assert(anotherTimeZoneId == localDatetime.timeZoneId());
107/// @endcode
108/// Finally, we stream `localDatetime` to `bsl::cout`:
109/// @code
110/// bsl::cout << localDatetime << bsl::endl;
111/// @endcode
112/// This statement produces the following output on `stdout`:
113/// @code
114/// [ 25DEC2009_11:00:00.000-0500 "Europe/Berlin" ]
115/// @endcode
116/// @}
117/** @} */
118/** @} */
119
120/** @addtogroup bal
121 * @{
122 */
123/** @addtogroup baltzo
124 * @{
125 */
126/** @addtogroup baltzo_localdatetime
127 * @{
128 */
129
130#include <balscm_version.h>
131
132#include <bdlt_datetimetz.h>
133
134#include <bslalg_swaputil.h>
135
136#include <bslma_allocator.h>
137#include <bslma_bslallocator.h>
139
141#include <bslmf_movableref.h>
143
144#include <bsls_assert.h>
145#include <bsls_keyword.h>
146#include <bsls_review.h>
147
150
151#include <bsl_iosfwd.h>
152#include <bsl_string.h>
153
154
155namespace baltzo {
156
157 // ===================
158 // class LocalDatetime
159 // ===================
160
161/// This unconstrained (value-semantic) attribute class characterizes a date
162/// time, offset from UTC, and a time zone identifier represented by a string.
163/// See the @ref baltzo_localdatetime-attributes section for information on the class attributes.
164///
165/// See @ref baltzo_localdatetime
167
168 // DATA
169 bdlt::DatetimeTz d_datetimeTz; // local date-time and offset from UTC
170 bsl::string d_timeZoneId; // local time-zone identifier
171
172 // FRIENDS
174
175 public:
176 // TYPES
178
179 // TRAITS
182
183 // CLASS METHODS
184
185 // Aspects
186
187#ifndef BDE_OMIT_INTERNAL_DEPRECATED
188 /// Return the most current BDEX streaming version number supported by
189 /// this class.
190 ///
191 /// @deprecated Use @ref maxSupportedBdexVersion(int) instead.
192 static int maxSupportedBdexVersion();
193
194#endif // BDE_OMIT_INTERNAL_DEPRECATED -- pending deprecation
195
196 /// Return the maximum valid BDEX format version, as indicated by the
197 /// specified `versionSelector`, to be passed to the `bdexStreamOut` method.
198 ///
199 /// \note Note that it is highly recommended that `versionSelector` be
200 /// formatted as "YYYYMMDD", a date representation. Also note that
201 /// `versionSelector` should be a *compile*-time-chosen value that selects
202 /// a format version supported by both externalizer and unexternalizer.
203 /// See the `bslx` package-level documentation for more information on BDEX
204 /// streaming of value-semantic types and containers.
205 static int maxSupportedBdexVersion(int versionSelector);
206
207 // CREATORS
208
209 /// Create a `LocalDatetime` object having the (default) attribute values:
210 /// @code
211 /// datetimeTz() == bdlt::DatetimeTz()
212 /// timeZoneId() == ""
213 /// @endcode
214 /// Optionally specify an `allocator` (e.g., the address of a
215 /// `bslma::Allocator` object) to supply memory; otherwise, the default
216 /// allocator is used.
218 explicit LocalDatetime(const allocator_type& allocator);
219
220 /// Create a `LocalDatetime` object with attribute values set from the
221 /// specified `datetimeTz` and `timeZoneId`. Optionally specify an
222 /// `allocator` (e.g., the address of a `bslma::Allocator` object) to
223 /// supply memory; otherwise, the default allocator is used. If
224 /// `timeZoneId` is passed as a null pointer, it is treated as an empty
225 /// string.
230 const char *timeZoneId,
232
233 /// Create a `LocalDatetime` object having the same value as the specified
234 /// `original` object. Optionally specify an `allocator` (e.g., the
235 /// address of a `bslma::Allocator` object) to supply memory; otherwise,
236 /// the default allocator is used.
237 LocalDatetime(const LocalDatetime& original,
239
240 /// Create a `LocalDatetime` object having the same value and the same
241 /// allocator as the specified `original` object. The value of `original`
242 /// becomes unspecified but valid, and its allocator remains unchanged.
245
246 /// Create a `LocalDatetime` object having the same value as the specified
247 /// `original` object, using the specified `allocator` (e.g., the address
248 /// of a `bslma::Allocator` object) to supply memory. The allocator of
249 /// `original` remains unchanged. If `original` and the newly created
250 /// object have the same allocator then the value of `original` becomes
251 /// unspecified but valid, and no exceptions will be thrown; otherwise
252 /// `original` is unchanged and an exception may be thrown.
255
256 /// Destroy this object.
258
259 // MANIPULATORS
260
261 /// Assign to this object the value of the specified `rhs` object, and
262 /// return a reference providing modifiable access to this object.
264
265 /// Assign to this object the value of the specified `rhs` object, and
266 /// return a non-`const` reference to this object. The allocators of this
267 /// object and `rhs` both remain unchanged. If `rhs` and this object have
268 /// the same allocator then the value of `rhs` becomes unspecified but
269 /// valid, and no exceptions will be thrown; otherwise `rhs` is unchanged
270 /// (and an exception may be thrown).
272
273 /// Set the `datetimeTz` attribute of this object to the specified `value`.
274 void setDatetimeTz(const bdlt::DatetimeTz& value);
275
276 /// Set the `timeZoneId` attribute of this object to the specified `value`.
277 /// If `value` is null, it is treated as an empty string.
278 void setTimeZoneId(const bsl::string_view& value);
279 void setTimeZoneId(const char *value);
280
281 // Aspects
282
283 /// Assign to this object the value read from the specified input `stream`
284 /// using the specified `version` format, and return a reference to
285 /// `stream`. If `stream` is initially invalid, this operation has no
286 /// effect. If `version` is not supported, this object is unaltered and
287 /// `stream` is invalidated, but otherwise unmodified. If `version` is
288 /// supported but `stream` becomes invalid during this operation, this object has an undefined, but valid, state.
289 ///
290 /// \note Note that no version is
291 /// read from `stream`. See the `bslx` package-level documentation for
292 /// more information on BDEX streaming of value-semantic types and
293 /// containers.
294 template <class STREAM>
295 STREAM& bdexStreamIn(STREAM& stream, int version);
296
297 /// Efficiently exchange the value of this object with the value of the
298 /// specified `other` object. This method provides the no-throw exception-safety guarantee.
299 ///
300 /// \pre The behavior is undefined unless this
301 /// object was created with the same allocator as was `other`.
302 void swap(LocalDatetime& other);
303
304 // ACCESSORS
305
306 /// Return a reference providing non-modifiable access to the
307 /// `datetimeTz` attribute of this object.
308 const bdlt::DatetimeTz& datetimeTz() const;
309
310 /// Return a reference providing non-modifiable access to the `timeZoneId`
311 /// attribute of this object.
312 const bsl::string& timeZoneId() const;
313
314 // Aspects
315
316 // Allocator
317
318 /// Return `get_allocator().mechanism()`.
319 ///
320 /// @deprecated Use @ref get_allocator() instead.
322
323 /// Return the allocator used by this object to supply memory.
324 ///
325 /// \note Note that if no allocator was supplied at construction the default allocator in
326 /// effect at construction is used.
328
329 // Output
330
331 /// Write the value of this object, using the specified `version` format,
332 /// to the specified output `stream`, and return a reference to `stream`.
333 /// If `stream` is initially invalid, this operation has no effect. If
334 /// `version` is not supported, `stream` is invalidated, but otherwise unmodified.
335 ///
336 /// \note Note that `version` is not written to `stream`. See the
337 /// `bslx` package-level documentation for more information on BDEX
338 /// streaming of value-semantic types and containers.
339 template <class STREAM>
340 STREAM& bdexStreamOut(STREAM& stream, int version) const;
341
342 /// Write the value of this object to the specified output `stream` in a
343 /// human-readable format, and return a reference providing modifiable
344 /// access to `stream`. Optionally specify an initial indentation `level`,
345 /// whose absolute value is incremented recursively for nested objects. If
346 /// `level` is specified, optionally specify `spacesPerLevel`, whose
347 /// absolute value indicates the number of spaces per indentation level for
348 /// this and all of its nested objects. If `level` is negative, suppress
349 /// indentation of the first line. If `spacesPerLevel` is negative, format
350 /// the entire output on one line, suppressing all but the initial
351 /// indentation (as governed by `level`). If `stream` is not valid on entry, this operation has no effect.
352 ///
353 /// \note Note that the format is not fully
354 /// specified, and can change without notice.
355 bsl::ostream& print(bsl::ostream& stream,
356 int level = 0,
357 int spacesPerLevel = 4) const;
358};
359
360// FREE OPERATORS
361
362/// Return `true` if the specified `lhs` and `rhs` objects have the same value,
363/// and `false` otherwise. Two `LocalDatetime` objects have the same value if
364/// all of the corresponding values of their `datetimeTz` and `timeZoneId`
365/// attributes are the same.
366bool operator==(const LocalDatetime& lhs, const LocalDatetime& rhs);
367
368/// Return `true` if the specified `lhs` and `rhs` objects do not have the same
369/// value, and `false` otherwise. Two `LocalDatetime` objects do not have the
370/// same value if any of the corresponding values of their `datetimeTz` or
371/// `timeZoneId` attributes are not the same.
372bool operator!=(const LocalDatetime& lhs, const LocalDatetime& rhs);
373
374/// Write the value of the specified `object` to the specified output `stream`
375/// in a single-line format, and return a reference providing modifiable access
376/// to `stream`. If `stream` is not valid on entry, this operation has no effect.
377///
378/// \note Note that this human-readable format is not fully specified and
379/// can change without notice. Also note that this method has the same
380/// behavior as `object.print(stream, 0, -1)` with the attribute names elided.
381bsl::ostream& operator<<(bsl::ostream& stream, const LocalDatetime& object);
382
383// FREE FUNCTIONS
384
385/// Exchange the values of the specified `a` and `b` objects. This function
386/// provides the no-throw exception-safety guarantee if the two objects were
387/// created with the same allocator and the basic guarantee otherwise.
388void swap(LocalDatetime& a, LocalDatetime& b);
389
390// ============================================================================
391// INLINE DEFINITIONS
392// ============================================================================
393
394 // -------------------
395 // class LocalDatetime
396 // -------------------
397
398// CLASS METHODS
399
400 // Aspects
401
402inline
403int LocalDatetime::maxSupportedBdexVersion(int /* versionSelector */)
404{
405 return 1;
406}
407
408// CREATORS
409inline
411: d_datetimeTz()
412, d_timeZoneId()
413{
414}
415
416inline
418: d_datetimeTz()
419, d_timeZoneId(allocator)
420{
421}
422
423inline
425 const bsl::string_view& timeZoneId,
426 const allocator_type& allocator)
427: d_datetimeTz(datetimeTz)
428, d_timeZoneId(timeZoneId.begin(), timeZoneId.end(), allocator)
429{
430}
431
432inline
434 const char *timeZoneId,
435 const allocator_type& allocator)
436: d_datetimeTz(datetimeTz)
437, d_timeZoneId(allocator)
438{
439 if (timeZoneId) {
440 bsl::string(timeZoneId, allocator).swap(d_timeZoneId);
441 }
442}
443
444inline
446 const allocator_type& allocator)
447: d_datetimeTz(original.d_datetimeTz)
448, d_timeZoneId(original.d_timeZoneId, allocator)
449{
450}
451
452inline
461
462inline
464 const allocator_type& allocator)
465: d_datetimeTz(bslmf::MovableRefUtil::move(
466 bslmf::MovableRefUtil::access(original).d_datetimeTz))
467, d_timeZoneId(bslmf::MovableRefUtil::move(
468 bslmf::MovableRefUtil::access(original).d_timeZoneId), allocator)
469{
470}
471
472inline
476
477// MANIPULATORS
478inline
480{
481 d_timeZoneId = rhs.d_timeZoneId; // first to allow strong guarantee
482 d_datetimeTz = rhs.d_datetimeTz;
483 return *this;
484}
485
486inline
488{
489 // Move 'd_timeZoneId' first for strong exception guarantee.
490
491 d_timeZoneId = bslmf::MovableRefUtil::move(
492 bslmf::MovableRefUtil::access(rhs).d_timeZoneId);
493
494 d_datetimeTz = bslmf::MovableRefUtil::move(
495 bslmf::MovableRefUtil::access(rhs).d_datetimeTz);
496
497 return *this;
498}
499
500inline
502{
503 d_datetimeTz = value;
504}
505
506inline
508{
509 // The swap ensures that the if the old value of 'd_timeZoneId' was longer
510 // than the new one, space won't be wasted.
511
512 bsl::string(value, d_timeZoneId.get_allocator().mechanism()).swap(
513 d_timeZoneId);
514}
515
516inline
517void LocalDatetime::setTimeZoneId(const char *value)
518{
519 if (value) {
520 d_timeZoneId.assign(value);
521 }
522 else {
523 d_timeZoneId.clear();
524 }
525}
526
527 // Aspects
528
529template <class STREAM>
530STREAM& LocalDatetime::bdexStreamIn(STREAM& stream, int version)
531{
532 if (stream) {
533 switch (version) {
534 case 1: {
535 bslx::InStreamFunctions::bdexStreamIn(stream, d_timeZoneId, 1);
536 bslx::InStreamFunctions::bdexStreamIn(stream, d_datetimeTz, 1);
537 } break;
538 default: {
539 stream.invalidate(); // unrecognized version number
540 }
541 }
542 }
543 return stream;
544}
545
546inline
548{
550
551 bslalg::SwapUtil::swap(&d_datetimeTz, &other.d_datetimeTz);
552 bslalg::SwapUtil::swap(&d_timeZoneId, &other.d_timeZoneId);
553}
554
555// ACCESSORS
556inline
558{
559 return d_datetimeTz;
560}
561
562inline
564{
565 return d_timeZoneId;
566}
567
568 // Aspects
569
570 // Allocator
571
572inline
577
578inline
583
584 // Output
585
586template <class STREAM>
587STREAM& LocalDatetime::bdexStreamOut(STREAM& stream, int version) const
588{
589 if (stream) {
590 switch (version) {
591 case 1: {
592 bslx::OutStreamFunctions::bdexStreamOut(stream, d_timeZoneId, 1);
593 bslx::OutStreamFunctions::bdexStreamOut(stream, d_datetimeTz, 1);
594 } break;
595 default: {
596 stream.invalidate(); // unrecognized version number
597 }
598 }
599 }
600 return stream;
601}
602
603#ifndef BDE_OMIT_INTERNAL_DEPRECATED // pending deprecation
604
605// DEPRECATED METHODS
606inline
611
612#endif // BDE_OMIT_INTERNAL_DEPRECATED -- pending deprecation
613
614} // close package namespace
615
616// FREE OPERATORS
617inline
618bool baltzo::operator==(const LocalDatetime& lhs, const LocalDatetime& rhs)
619{
620 return lhs.datetimeTz() == rhs.datetimeTz()
621 && lhs.timeZoneId() == rhs.timeZoneId();
622}
623
624inline
625bool baltzo::operator!=(const LocalDatetime& lhs, const LocalDatetime& rhs)
626{
627 return lhs.datetimeTz() != rhs.datetimeTz()
628 || lhs.timeZoneId() != rhs.timeZoneId();
629}
630
631// FREE FUNCTIONS
632inline
633void baltzo::swap(LocalDatetime& a, LocalDatetime& b)
634{
635 bslalg::SwapUtil::swap(&a.d_datetimeTz, &b.d_datetimeTz);
636 bslalg::SwapUtil::swap(&a.d_timeZoneId, &b.d_timeZoneId);
637}
638
639
640
641#endif
642
643// ----------------------------------------------------------------------------
644// Copyright 2018 Bloomberg Finance L.P.
645//
646// Licensed under the Apache License, Version 2.0 (the "License");
647// you may not use this file except in compliance with the License.
648// You may obtain a copy of the License at
649//
650// http://www.apache.org/licenses/LICENSE-2.0
651//
652// Unless required by applicable law or agreed to in writing, software
653// distributed under the License is distributed on an "AS IS" BASIS,
654// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
655// See the License for the specific language governing permissions and
656// limitations under the License.
657// ----------------------------- END-OF-FILE ----------------------------------
658
659/** @} */
660/** @} */
661/** @} */
Definition baltzo_localdatetime.h:166
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
void setDatetimeTz(const bdlt::DatetimeTz &value)
Set the datetimeTz attribute of this object to the specified value.
Definition baltzo_localdatetime.h:501
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition baltzo_localdatetime.h:530
const bsl::string & timeZoneId() const
Definition baltzo_localdatetime.h:563
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition baltzo_localdatetime.h:587
friend void swap(LocalDatetime &, LocalDatetime &)
bsl::allocator< char > allocator_type
Definition baltzo_localdatetime.h:177
LocalDatetime & operator=(const LocalDatetime &rhs)
Definition baltzo_localdatetime.h:479
~LocalDatetime()
Destroy this object.
Definition baltzo_localdatetime.h:473
BSLMF_NESTED_TRAIT_DECLARATION(LocalDatetime, bslmf::IsBitwiseMoveable)
LocalDatetime()
Definition baltzo_localdatetime.h:410
allocator_type get_allocator() const
Definition baltzo_localdatetime.h:579
static int maxSupportedBdexVersion()
Definition baltzo_localdatetime.h:607
void setTimeZoneId(const bsl::string_view &value)
Definition baltzo_localdatetime.h:507
bslma::Allocator * allocator() const
Definition baltzo_localdatetime.h:573
const bdlt::DatetimeTz & datetimeTz() const
Definition baltzo_localdatetime.h:557
BSLMF_NESTED_TRAIT_DECLARATION(LocalDatetime, bslma::UsesBslmaAllocator)
Definition bdlt_datetimetz.h:308
Definition bslma_bslallocator.h:588
BloombergLP::bslma::Allocator * mechanism() const
Definition bslma_bslallocator.h:1146
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
basic_string & assign(const basic_string &replacement)
Definition bslstl_string.h:6347
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by this string to supply memory.
Definition bslstl_string.h:7423
void clear() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:6043
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:182
Definition bslma_allocator.h:545
Definition bslmf_movableref.h:752
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#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 baltzo_datafileloader.h:259
bool operator==(const LocalDatetime &lhs, const LocalDatetime &rhs)
void swap(LocalDatetime &a, LocalDatetime &b)
bool operator!=(const LocalDatetime &lhs, const LocalDatetime &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, DstPolicy::Enum value)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
basic_string< char > string
Definition bslstl_string.h:844
Definition bdlbb_blob.h:579
STREAM & bdexStreamIn(STREAM &stream, VALUE_TYPE &variable)
Definition bslx_instreamfunctions.h:1263
STREAM & bdexStreamOut(STREAM &stream, const TYPE &value)
Definition bslx_outstreamfunctions.h:1004
Definition bslma_usesbslmaallocator.h:344
Definition bslmf_isbitwisemoveable.h:718
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067
static t_TYPE & access(t_TYPE &ref) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1039