BDE 4.39.x Production Release
Loading...
Searching...
No Matches
baltzo_localtimedescriptor.h
Go to the documentation of this file.
1/// @file baltzo_localtimedescriptor.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// baltzo_localtimedescriptor.h -*-C++-*-
8#ifndef INCLUDED_BALTZO_LOCALTIMEDESCRIPTOR
9#define INCLUDED_BALTZO_LOCALTIMEDESCRIPTOR
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14/// @defgroup baltzo_localtimedescriptor baltzo_localtimedescriptor
15/// @brief Provide an attribute class for characterizing local time values.
16/// @addtogroup bal
17/// @{
18/// @addtogroup baltzo
19/// @{
20/// @addtogroup baltzo_localtimedescriptor
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#baltzo_localtimedescriptor-purpose"> Purpose</a>
25/// * <a href="#baltzo_localtimedescriptor-classes"> Classes </a>
26/// * <a href="#baltzo_localtimedescriptor-description"> Description </a>
27/// * <a href="#baltzo_localtimedescriptor-attributes"> Attributes </a>
28/// * <a href="#baltzo_localtimedescriptor-usage"> Usage </a>
29/// * <a href="#baltzo_localtimedescriptor-example-1-converting-between-utc-and-local-times"> Example 1: Converting Between UTC and Local Times </a>
30///
31/// # Purpose {#baltzo_localtimedescriptor-purpose}
32/// Provide an attribute class for characterizing local time values.
33///
34/// # Classes {#baltzo_localtimedescriptor-classes}
35///
36/// - baltzo::LocalTimeDescriptor: attributes characterizing a local time
37///
38/// @see baltzo_zoneinfo
39///
40/// # Description {#baltzo_localtimedescriptor-description}
41/// This component provides a single, simply constrained
42/// (value-semantic) attribute class, `baltzo::LocalTimeDescriptor`, that is
43/// used to characterize subsets of local time values within time zones. Note
44/// that this class is consistent with the "local-time types" found in the
45/// "Zoneinfo" representation of a time zone (see @ref baltzo_zoneinfo ).
46///
47/// ## Attributes {#baltzo_localtimedescriptor-attributes}
48///
49///
50/// @code
51/// Name Type Default Simple Constraints
52/// ------------------ ----------- ------- ------------------
53/// description bsl::string "" none
54/// dstInEffectFlag bool false none
55/// utcOffsetInSeconds int 0 [-86399 .. 86399]
56/// @endcode
57/// * `description`: non-canonical, non-localized name (intended for
58/// debugging).
59/// * `dstInEffectFlag`: `true` if the described local times are
60/// Daylight-Saving-Time (DST) values.
61/// * `utcOffsetInSeconds`: offset from UTC of the described local times.
62///
63/// For example, in New York on January 1, 2011, the local time is Eastern
64/// Standard Time, Daylight-Saving Time (DST) is not in effect, and the offset
65/// from UTC is -5 hours. We can represent this information using a
66/// `baltzo::LocalTimeDescriptor` object whose `description` is "EST",
67/// `dstInEffectFlag` is `false`, and `utcOffsetInSeconds` is
68/// `-18,000 (-5*60*60)`. Note that `description` is *not* canonical, and is
69/// intended for development and debugging only.
70///
71/// ## Usage {#baltzo_localtimedescriptor-usage}
72///
73///
74/// This section illustrates intended use of this component.
75///
76/// ### Example 1: Converting Between UTC and Local Times {#baltzo_localtimedescriptor-example-1-converting-between-utc-and-local-times}
77///
78///
79/// When using the "Zoneinfo" database, we want to represent and access the
80/// local time information contained in the "Zoneinfo" binary data files. Once
81/// we have obtained this information, we can use it to convert times from one
82/// time zone to another. The following code illustrates how to perform such
83/// conversions using `baltzo::LocalTimeDescriptor`.
84///
85/// First, we define a `baltzo::LocalTimeDescriptor` object that characterizes
86/// the local time in effect for New York Daylight-Saving Time in 2010:
87/// @code
88/// enum { NEW_YORK_DST_OFFSET = -4 * 60 * 60 }; // -4 hours in seconds
89///
90/// baltzo::LocalTimeDescriptor newYorkDst(NEW_YORK_DST_OFFSET, true, "EDT");
91///
92/// assert(NEW_YORK_DST_OFFSET == newYorkDst.utcOffsetInSeconds());
93/// assert( true == newYorkDst.dstInEffectFlag());
94/// assert( "EDT" == newYorkDst.description());
95/// @endcode
96/// Then, we create a `bdlt::Datetime` representing the time
97/// "Jul 20, 2010 11:00" in New York:
98/// @code
99/// bdlt::Datetime newYorkDatetime(2010, 7, 20, 11, 0, 0);
100/// @endcode
101/// Next, we convert `newYorkDatetime` to its corresponding UTC value using the
102/// `newYorkDst` descriptor (created above); note that, when converting from a
103/// local time to a UTC time, the *signed* offset from UTC is *subtracted* from
104/// the local time:
105/// @code
106/// bdlt::Datetime utcDatetime = newYorkDatetime;
107/// utcDatetime.addSeconds(-newYorkDst.utcOffsetInSeconds());
108/// @endcode
109/// Then, we verify that the result corresponds to the expected UTC time,
110/// "Jul 20, 2010 15:00":
111/// @code
112/// assert(bdlt::Datetime(2010, 7, 20, 15, 0, 0) == utcDatetime);
113/// @endcode
114/// Next, we define a `baltzo::LocalTimeDescriptor` object that describes the
115/// local time in effect for Rome in the summer of 2010:
116/// @code
117/// enum { ROME_DST_OFFSET = 2 * 60 * 60 }; // 2 hours in seconds
118///
119/// baltzo::LocalTimeDescriptor romeDst(ROME_DST_OFFSET, true, "CEST");
120///
121/// assert(ROME_DST_OFFSET == romeDst.utcOffsetInSeconds());
122/// assert( true == romeDst.dstInEffectFlag());
123/// assert( "CEST" == romeDst.description());
124/// @endcode
125/// Now, we convert `utcDatetime` to its corresponding local-time value in Rome
126/// using the `romeDst` descriptor (created above):
127/// @code
128/// bdlt::Datetime romeDatetime = utcDatetime;
129/// romeDatetime.addSeconds(romeDst.utcOffsetInSeconds());
130/// @endcode
131/// Notice that, when converting from UTC time to local time, the signed offset
132/// from UTC is *added* to UTC time rather than subtracted.
133///
134/// Finally, we verify that the result corresponds to the expected local time,
135/// "Jul 20, 2010 17:00":
136/// @code
137/// assert(bdlt::Datetime(2010, 7, 20, 17, 0, 0) == romeDatetime);
138/// @endcode
139/// @}
140/** @} */
141/** @} */
142
143/** @addtogroup bal
144 * @{
145 */
146/** @addtogroup baltzo
147 * @{
148 */
149/** @addtogroup baltzo_localtimedescriptor
150 * @{
151 */
152
153#include <balscm_version.h>
154
155#include <bslalg_swaputil.h>
156
157#include <bslma_aatypeutil.h>
158#include <bslma_allocatorutil.h>
159#include <bslma_bslallocator.h>
160
163
164#include <bsls_assert.h>
165#include <bsls_keyword.h>
166#include <bsls_review.h>
167
168#include <bsl_algorithm.h>
169#include <bsl_iosfwd.h>
170#include <bsl_string.h>
171
172
173namespace baltzo {
174
175 // =========================
176 // class LocalTimeDescriptor
177 // =========================
178
179/// This simply constrained (value-semantic) attribute class characterizes a
180/// subset of local time values. See the @ref baltzo_localtimedescriptor-attributes section for information on the class attributes.
181///
182/// \note Note that the class invariants are
183/// identically the constraints on the individual attributes.
184///
185/// See @ref baltzo_localtimedescriptor
187
188 // DATA
189 int d_utcOffsetInSeconds; // *signed* offset *from* UTC
190
191 bool d_dstInEffectFlag; // `true` if Daylight-Saving Time is in
192 // effect, and `false` otherwise
193
194 bsl::string d_description; // *non-canonical* identifier for this
195 // descriptor
196
197 // FRIENDS
199
200 public:
201 // TYPES
203
204 // TRAITS
207
208 // CLASS METHODS
209
210 /// Return `true` if the specified `value` is in the range
211 /// `[-86399 .. 86399]`, and `false` otherwise.
212 static bool isValidUtcOffsetInSeconds(int value);
213
214 // CREATORS
215
216 /// Create a `LocalTimeDescriptor` object having the (default)
217 /// attribute values:
218 /// @code
219 /// utcOffsetInSeconds() == 0
220 /// dstInEffectFlag() == false
221 /// description() == ""
222 /// @endcode
223 /// Optionally specify an `allocator` (e.g., the address of a
224 /// `bslma::Allocator` object) to supply memory; otherwise, the default
225 /// allocator is used.
228
229 /// Create a `LocalTimeDescriptor` object having the specified
230 /// `utcOffsetInSeconds`, `dstInEffectFlag`, and `description`
231 /// attribute values. Optionally specify an `allocator` (e.g., the
232 /// address of a `bslma::Allocator` object) to supply memory; otherwise, the default allocator is used.
233 ///
234 /// \pre The behavior is undefined unless
235 /// `-86339 <= utcOffsetInSeconds <= 86399`.
237 bool dstInEffectFlag,
240
241 /// Create a `LocalTimeDescriptor` object having the same value as the
242 /// specified `original` object. Optionally specify an `allocator`
243 /// (e.g., the address of a `bslma::Allocator` object) to supply memory;
244 /// otherwise, the default allocator is used.
247
248 /// Create a `LocalTimeDescriptor` object having the same value and the
249 /// same allocator as the specified `original` object. The value of
250 /// `original` becomes unspecified but valid, and its allocator remains
251 /// unchanged.
254
255 /// Create a `LocalTimeDescriptor` object having the same value as the
256 /// specified `original` object, using the specified `allocator` (e.g.,
257 /// the address of a `bslma::Allocator` object) to supply memory. The
258 /// allocator of `original` remains unchanged. If `original` and the
259 /// newly created object have the same allocator then the value of
260 /// `original` becomes unspecified but valid, and no exceptions will be
261 /// thrown; otherwise `original` is unchanged and an exception may be
262 /// thrown.
265
266 /// Destroy this object.
268
269 // MANIPULATORS
270
271 /// Assign to this object the value of the specified `rhs` object, and
272 /// return a non-`const` reference to this object.
274
275 /// Assign to this object the value of the specified `rhs` object, and
276 /// return a non-`const` reference to this object. The allocators of
277 /// this object and `rhs` both remain unchanged. If `rhs` and this
278 /// object have the same allocator then the value of `rhs` becomes
279 /// unspecified but valid, and no exceptions will be thrown; otherwise
280 /// `rhs` is unchanged (and an exception may be thrown).
282
283 /// Set the `description` attribute of this object to the specified `value`.
284 ///
285 /// \note Note that `value` is not canonical, and is intended for
286 /// debugging only.
287 void setDescription(const bsl::string_view& value);
288
289 /// Set the `dstInEffectFlag` attribute of this object to the specified `value`.
290 ///
291 /// \note Note that `true` implies Daylight-Saving Time (DST) is in
292 /// effect.
293 void setDstInEffectFlag(bool value);
294
295 /// Set the `utcOffsetInSeconds` attribute of this object to the specified `value`.
296 ///
297 /// \pre The behavior is undefined unless
298 /// `-86399 <= value <= 86399`.
299 void setUtcOffsetInSeconds(int value);
300
301 // Aspects
302
303 /// Efficiently exchange the value of this object with the value of the
304 /// specified `other` object. This method provides the no-throw exception-safety guarantee.
305 ///
306 /// \pre The behavior is undefined unless this
307 /// object was created with the same allocator as `other`.
308 void swap(LocalTimeDescriptor& other);
309
310 // ACCESSORS
311
312 /// Return a `const` reference to the `description` attribute of this object.
313 ///
314 /// \note Note that `description` is not canonical, and is intended
315 /// for debugging only.
316 const bsl::string& description() const;
317
318 /// Return the value of the `dstInEffectFlag` attribute of this object.
319 ///
320 /// \note Note that `true` implies Daylight-Saving Time (DST) is in effect.
321 bool dstInEffectFlag() const;
322
323 /// Return the value of the `utcOffsetInSeconds` attribute of this object.
324 ///
325 /// \note Note that this value is in the range `[-86399 .. 86399]`.
326 int utcOffsetInSeconds() const;
327
328 // Aspects
329
330 /// Return `get_allocator().mechanism()`.
331 ///
332 /// @deprecated Use @ref get_allocator() instead.
334
335 /// Return the allocator used by this object to supply memory.
336 ///
337 /// \note Note that if no allocator was supplied at construction the default
338 /// allocator in effect at construction is used.
340
341 /// Write the value of this object to the specified output `stream` in a
342 /// human-readable format, and return a non-`const` reference to
343 /// `stream`. Optionally specify an initial indentation `level`, whose
344 /// absolute value is incremented recursively for nested objects. If
345 /// `level` is specified, optionally specify `spacesPerLevel`, whose
346 /// absolute value indicates the number of spaces per indentation level
347 /// for this and all of its nested objects. If `level` is negative,
348 /// suppress indentation of the first line. If `spacesPerLevel` is
349 /// negative, format the entire output on one line, suppressing all but
350 /// the initial indentation (as governed by `level`). If `stream` is not valid on entry, this operation has no effect.
351 ///
352 /// \note Note that the
353 /// format is not fully specified, and can change without notice.
354 bsl::ostream& print(bsl::ostream& stream,
355 int level = 0,
356 int spacesPerLevel = 4) const;
357};
358
359// FREE OPERATORS
360
361/// Return `true` if the specified `lhs` and `rhs` objects have the same
362/// value, and `false` otherwise. Two `LocalTimeDescriptor` objects have
363/// the same value if all of the corresponding values of their
364/// `utcOffsetInSeconds`, `dstInEffectFlag`, and `description` attributes
365/// are the same.
366bool operator==(const LocalTimeDescriptor& lhs,
367 const LocalTimeDescriptor& rhs);
368
369/// Return `true` if the specified `lhs` and `rhs` objects do not have the
370/// same value, and `false` otherwise. Two `LocalTimeDescriptor` objects do
371/// not have the same value if any of the corresponding values of their
372/// `utcOffsetInSeconds`, `dstInEffectFlag`, or `description` attributes are
373/// not the same.
374bool operator!=(const LocalTimeDescriptor& lhs,
375 const LocalTimeDescriptor& rhs);
376
377/// Write the value of the specified `object` to the specified output
378/// `stream` in a single-line format, and return a non-`const` reference to
379/// `stream`. If `stream` is not valid on entry, this operation has no effect.
380///
381/// \note Note that this human-readable format is not fully specified and
382/// can change without notice. Also note that this method has the same
383/// behavior as `object.print(stream, 0, -1)`, but with the attribute names
384/// elided.
385bsl::ostream& operator<<(bsl::ostream& stream,
386 const LocalTimeDescriptor& object);
387
388// FREE FUNCTIONS
389
390/// Exchange the values of the specified `a` and `b` objects. This function
391/// provides the no-throw exception-safety guarantee if the two objects were
392/// created with the same allocator and the basic guarantee otherwise.
394
395// ============================================================================
396// INLINE DEFINITIONS
397// ============================================================================
398
399 // -------------------------
400 // class LocalTimeDescriptor
401 // -------------------------
402
403// CLASS METHODS
404inline
406{
407 return value >= -86399 && value <= 86399;
408}
409
410// CREATORS
411inline
413: d_utcOffsetInSeconds(0)
414, d_dstInEffectFlag(false)
415, d_description()
416{
417}
418
419inline
421: d_utcOffsetInSeconds(0)
422, d_dstInEffectFlag(false)
423, d_description(bslma::AllocatorUtil::adapt(allocator))
424{
425}
426
427inline
429 int utcOffsetInSeconds,
430 bool dstInEffectFlag,
431 const bsl::string_view& description,
432 const allocator_type& allocator)
433: d_utcOffsetInSeconds(utcOffsetInSeconds)
434, d_dstInEffectFlag(dstInEffectFlag)
435, d_description(description.begin(),
436 description.end(),
437 bslma::AllocatorUtil::adapt(allocator))
438{
440}
441
442inline
444 const allocator_type& allocator)
445: d_utcOffsetInSeconds(original.d_utcOffsetInSeconds)
446, d_dstInEffectFlag(original.d_dstInEffectFlag)
447, d_description(original.d_description, bslma::AllocatorUtil::adapt(allocator))
448{
449}
450
451inline
454: d_utcOffsetInSeconds(bslmf::MovableRefUtil::move(
455 bslmf::MovableRefUtil::access(original).d_utcOffsetInSeconds)),
456 d_dstInEffectFlag(bslmf::MovableRefUtil::move(
457 bslmf::MovableRefUtil::access(original).d_dstInEffectFlag)),
458 d_description(bslmf::MovableRefUtil::move(
459 bslmf::MovableRefUtil::access(original).d_description))
460{
461}
462
463inline
466 const allocator_type& allocator)
467: d_utcOffsetInSeconds(bslmf::MovableRefUtil::move(
468 bslmf::MovableRefUtil::access(original).d_utcOffsetInSeconds))
469, d_dstInEffectFlag(bslmf::MovableRefUtil::move(
470 bslmf::MovableRefUtil::access(original).d_dstInEffectFlag))
471, d_description(
472 bslmf::MovableRefUtil::move(
473 bslmf::MovableRefUtil::access(original).d_description),
474 bslma::AllocatorUtil::adapt(allocator))
475{
476}
477
478
479inline
484
485// MANIPULATORS
486inline
488 const LocalTimeDescriptor& rhs)
489{
490 d_description = rhs.d_description; // first for strong
491 // exception guarantee
492 d_utcOffsetInSeconds = rhs.d_utcOffsetInSeconds;
493 d_dstInEffectFlag = rhs.d_dstInEffectFlag;
494 return *this;
495}
496
497inline
500{
501 // Move 'd_description' first for strong exception guarantee.
502
503 d_description = bslmf::MovableRefUtil::move(
504 bslmf::MovableRefUtil::access(rhs).d_description);
505
506 d_utcOffsetInSeconds = bslmf::MovableRefUtil::move(
507 bslmf::MovableRefUtil::access(rhs).d_utcOffsetInSeconds);
508
509 d_dstInEffectFlag = bslmf::MovableRefUtil::move(
510 bslmf::MovableRefUtil::access(rhs).d_dstInEffectFlag);
511
512 return *this;
513}
514
515
516inline
518{
519 d_description.assign(value.begin(), value.end());
520}
521
522inline
524{
525 d_dstInEffectFlag = value;
526}
527
528inline
530{
532
533 d_utcOffsetInSeconds = value;
534}
535
536 // Aspects
537
538inline
540{
542
543 bslalg::SwapUtil::swap(&d_description, &other.d_description);
544 bslalg::SwapUtil::swap(&d_dstInEffectFlag, &other.d_dstInEffectFlag);
545 bslalg::SwapUtil::swap(&d_utcOffsetInSeconds, &other.d_utcOffsetInSeconds);
546}
547
548// ACCESSORS
549inline
551{
552 return d_description;
553}
554
555inline
557{
558 return d_dstInEffectFlag;
559}
560
561inline
563{
564 return d_utcOffsetInSeconds;
565}
566
567 // Aspects
568
569inline
574
575inline
577{
578 return bslma::AATypeUtil::getAllocatorFromSubobject<allocator_type>(
579 d_description);
580}
581
582} // close package namespace
583
584// FREE OPERATORS
585inline
586bool baltzo::operator==(const LocalTimeDescriptor& lhs,
587 const LocalTimeDescriptor& rhs)
588{
589 return lhs.utcOffsetInSeconds() == rhs.utcOffsetInSeconds()
590 && lhs.dstInEffectFlag() == rhs.dstInEffectFlag()
591 && lhs.description() == rhs.description();
592}
593
594inline
595bool baltzo::operator!=(const LocalTimeDescriptor& lhs,
596 const LocalTimeDescriptor& rhs)
597{
598 return lhs.utcOffsetInSeconds() != rhs.utcOffsetInSeconds()
599 || lhs.dstInEffectFlag() != rhs.dstInEffectFlag()
600 || lhs.description() != rhs.description();
601}
602
603// FREE FUNCTIONS
604inline
605void baltzo::swap(LocalTimeDescriptor& a, LocalTimeDescriptor& b)
606{
607 bslalg::SwapUtil::swap(&a.d_description, &b.d_description);
608 bslalg::SwapUtil::swap(&a.d_dstInEffectFlag, &b.d_dstInEffectFlag);
609 bslalg::SwapUtil::swap(&a.d_utcOffsetInSeconds, &b.d_utcOffsetInSeconds);
610}
611
612
613
614#endif
615
616// ----------------------------------------------------------------------------
617// Copyright 2020 Bloomberg Finance L.P.
618//
619// Licensed under the Apache License, Version 2.0 (the "License");
620// you may not use this file except in compliance with the License.
621// You may obtain a copy of the License at
622//
623// http://www.apache.org/licenses/LICENSE-2.0
624//
625// Unless required by applicable law or agreed to in writing, software
626// distributed under the License is distributed on an "AS IS" BASIS,
627// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
628// See the License for the specific language governing permissions and
629// limitations under the License.
630// ----------------------------- END-OF-FILE ----------------------------------
631
632/** @} */
633/** @} */
634/** @} */
Definition baltzo_localtimedescriptor.h:186
const bsl::string & description() const
Definition baltzo_localtimedescriptor.h:550
bsl::allocator allocator_type
Definition baltzo_localtimedescriptor.h:202
static bool isValidUtcOffsetInSeconds(int value)
Definition baltzo_localtimedescriptor.h:405
friend void swap(LocalTimeDescriptor &, LocalTimeDescriptor &)
BSLMF_NESTED_TRAIT_DECLARATION(LocalTimeDescriptor, bslmf::IsBitwiseMoveable)
LocalTimeDescriptor & operator=(const LocalTimeDescriptor &rhs)
Definition baltzo_localtimedescriptor.h:487
void setDescription(const bsl::string_view &value)
Definition baltzo_localtimedescriptor.h:517
void setDstInEffectFlag(bool value)
Definition baltzo_localtimedescriptor.h:523
void setUtcOffsetInSeconds(int value)
Definition baltzo_localtimedescriptor.h:529
bslma::Allocator * allocator() const
Definition baltzo_localtimedescriptor.h:570
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
~LocalTimeDescriptor()
Destroy this object.
Definition baltzo_localtimedescriptor.h:480
LocalTimeDescriptor()
Definition baltzo_localtimedescriptor.h:412
bool dstInEffectFlag() const
Definition baltzo_localtimedescriptor.h:556
allocator_type get_allocator() const
Definition baltzo_localtimedescriptor.h:576
int utcOffsetInSeconds() const
Definition baltzo_localtimedescriptor.h:562
Definition bslma_bslallocator.h:588
BloombergLP::bslma::Allocator * mechanism() const
Definition bslma_bslallocator.h:1146
Definition bslstl_stringview.h:471
BSLS_KEYWORD_CONSTEXPR const_iterator end() const BSLS_KEYWORD_NOEXCEPT
Return the past-the-end iterator for this view.
Definition bslstl_stringview.h:1848
BSLS_KEYWORD_CONSTEXPR const_iterator begin() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_stringview.h:1830
Definition bslstl_string.h:1252
basic_string & assign(const basic_string &replacement)
Definition bslstl_string.h:6347
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
Definition baljsn_encoder_testtypes.h:76
Definition bdlbb_blob.h:579
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