BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bdlde_base64decoderoptions.h
Go to the documentation of this file.
1/// @file bdlde_base64decoderoptions.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bdlde_base64decoderoptions.h -*-C++-*-
8#ifndef INCLUDED_BDLDE_BASE64DECODEROPTIONS
9#define INCLUDED_BDLDE_BASE64DECODEROPTIONS
10
11#include <bsls_ident.h>
12BSLS_IDENT_RCSID(bdlde_base64decoderoptions_h,"$Id$ $CSID$")
14
15/// @defgroup bdlde_base64decoderoptions bdlde_base64decoderoptions
16/// @brief Provide value-semantic attribute class for decoder options.
17/// @addtogroup bdl
18/// @{
19/// @addtogroup bdlde
20/// @{
21/// @addtogroup bdlde_base64decoderoptions
22/// @{
23///
24/// <h1> Outline </h1>
25/// * <a href="#bdlde_base64decoderoptions-purpose"> Purpose</a>
26/// * <a href="#bdlde_base64decoderoptions-classes"> Classes </a>
27/// * <a href="#bdlde_base64decoderoptions-description"> Description </a>
28/// * <a href="#bdlde_base64decoderoptions-attributes"> Attributes </a>
29/// * <a href="#bdlde_base64decoderoptions-pre-defined-styles"> Pre-Defined Styles </a>
30/// * <a href="#bdlde_base64decoderoptions-standards-references"> Standards References </a>
31/// * <a href="#bdlde_base64decoderoptions-rfc-2045---mime-standard"> RFC-2045 - Mime Standard </a>
32/// * <a href="#bdlde_base64decoderoptions-rfc-4648---the-base16|32|64-encoding-standard"> RFC-4648 - The Base16|32|64 Encoding Standard </a>
33/// * <a href="#bdlde_base64decoderoptions-usage"> Usage </a>
34/// * <a href="#bdlde_base64decoderoptions-example-1-basic-usage"> Example 1: Basic Usage </a>
35/// * <a href="#bdlde_base64decoderoptions-example-2"> Example 2: </a>
36/// * <a href="#bdlde_base64decoderoptions-example-3"> Example 3: </a>
37/// * <a href="#bdlde_base64decoderoptions-example-4"> Example 4: </a>
38///
39/// # Purpose {#bdlde_base64decoderoptions-purpose}
40/// Provide value-semantic attribute class for decoder options.
41///
42/// # Classes {#bdlde_base64decoderoptions-classes}
43///
44/// - bdlde::Base64DecoderOptions: options for decoder
45///
46/// @see bdlde_base64decoderoptions, bdlde_base64decoder,
47/// bdlde_base64encoder, bdlde_base64alphabet
48///
49/// # Description {#bdlde_base64decoderoptions-description}
50/// This component provides a value-semantic attribute class for
51/// specifying options for `bdlde::Base64Decoder`.
52///
53/// This `class` supports default-generated copy construction and copy
54/// assignment, but the constructor is private. To create an object one must
55/// call one of the class methods, which will return a newly-constructed object
56/// by value. Specialized class methods are provided to create objects
57/// configured for the `mime`, `urlSafe`, and `standard` configurations.
58///
59/// Other configurations may be obtained by specifying arguments to the `custom`
60/// class method, or by calling the setters after the object is created.
61///
62/// ## Attributes {#bdlde_base64decoderoptions-attributes}
63///
64///
65/// @code
66/// Name Type
67/// ---------- ----------------------
68/// ignoreMode Base64IgnoreMode::Enum
69/// alphabet Base64Alphabet::Enum
70/// isPadded bool
71/// @endcode
72/// * `ignoreMode`: which types of characters, if any, are to be ignored
73/// - `e_IGNORE_NONE` : no input is ignored, any invalid Base64 character in
74/// the input will produce an error
75///
76/// - `e_IGNORE_WHITESPACE` : whitespace in the input is ignored (normally
77/// whitespace characters are invalid Base64 input)
78///
79/// - `e_IGNORE_UNRECOGNIZED` : all invalid Base64 characters in the input
80/// are ignored (no invalid input errors)
81///
82/// * `alphabet`: describes the set of available characters (or alphabet) that
83/// may appear in the resulting encoded text. Note that Base64 encoding
84/// breaks binary data into 64 bit blocks, where the numeric values 0-61 are
85/// encoded using [0-9a-zA-Z], the alphabet only impacts how the values 62
86/// and 63 are represented:
87/// - `e_BASIC` : defined in standard RFC 2045 section 6.8, and should be the
88/// default choice, uses '+' and '/' for 62 and 63, respectively,
89///
90/// - `e_URL` : defined in RFC 4648 section 5, creates an encoded
91/// representation suitable for use in a URL or filename. The alphabet
92/// avoids characters like '/' that have a special meaning in the context
93/// of a URL or filename. Uses '-' and '_' for 62 and 63, respectively.
94///
95/// * `isPadded` : `bool` : if true, indicates that output is padded with '='
96/// characters to a multiple of 4 characters.
97///
98/// ## Pre-Defined Styles {#bdlde_base64decoderoptions-pre-defined-styles}
99///
100///
101/// The `Base64DecoderOptions' type provides a set of factory class methods,
102/// `custom`, `mime`, `standard`, and `urlStafe` to easily create a
103/// `Base64DecoderOptions` object having typical configuration parameters.
104/// Always use these methods to create a 'Base64DecoderOptions' object, the
105/// object is copyable, but the value constructor is private.
106///
107/// | class method | ignoreMode | alphabet | isPadded |
108/// | :----------- | :-------------------: | :------: | :------: |
109/// | custom | any | any | any |
110/// | mime | (e_IGNORE_WHITESPACE) | e_BASIC | true |
111/// | standard | (e_IGNORE_NONE) | e_BASIC | (true) |
112/// | urlSafe | (e_IGNORE_NONE) | e_URL | (false) |
113///
114/// Note that in the above table, values in parentheses -- e.g. (e_IGNORE_NONE)
115/// indicate a default which may be overrideen by a user-supplied value.
116///
117/// ## Standards References {#bdlde_base64decoderoptions-standards-references}
118///
119///
120/// Below is some background on standards related to base64 encoding.
121///
122/// ### RFC-2045 - Mime Standard {#bdlde_base64decoderoptions-rfc-2045---mime-standard}
123///
124///
125/// The Base64 encoding originated as a way of encoding arbitrary binary data
126/// into the body of ASCII-only emails. This was the MIME standard,
127/// https://datatracker.ietf.org/doc/html/rfc2045#section-6.8
128///
129/// The `mime` factory function creates a Base64Encoder configured to the MIME
130/// specification.
131///
132/// ### RFC-4648 - The Base16|32|64 Encoding Standard {#bdlde_base64decoderoptions-rfc-4648---the-base16|32|64-encoding-standard}
133///
134///
135/// Eventually, Base64 encoding was separately standardized in RFC-4648:
136/// https://datatracker.ietf.org/doc/html/rfc464
137///
138/// This standard differs slightly from the original MIME Base64 encoding in
139/// that the encoding doesn't have line feeds, and the padding at the end of a
140/// line is optional.
141///
142/// This standard provides a couple variants of the alphabet of characters that
143/// can be used to encode the data.
144///
145/// **Standard Alphabet** - the standard alphabet is described in
146/// https://datatracker.ietf.org/doc/html/rfc4648#section-4. A factory function
147/// `standard` is provided to create a `Base64Encoder` configured to use the
148/// standard alphabet.
149///
150/// ** URL and Filename Safe Alphabet** - An alternative alphabet for encoding
151/// data to be used in file names or URLs in
152/// https://datatracker.ietf.org/doc/html/rfc4648#section-5. A factory function
153/// `urlSafe` is provided to create a `Base64Encoder` configured to use the URL
154/// and filename safe alphabet. This alphabet avoids characters, like '/', that
155/// have a special meaning the the context of a file name or URL.
156///
157/// ## Usage {#bdlde_base64decoderoptions-usage}
158///
159///
160/// This section illustrates intended use of this component.
161///
162/// ### Example 1: Basic Usage {#bdlde_base64decoderoptions-example-1-basic-usage}
163///
164///
165/// Suppose we want a `Base64DecoderOptions` object configured for MIME
166/// encoding, meaning `alphabet == e_BASIC`, `isPadded == true`, and
167/// `ignoreMode = e_IGNORE_WHITESPACE`.
168///
169/// First, we call the `mime` class method, and we're done.
170/// @code
171/// const bdlde::Base64DecoderOptions& mimeOptions =
172/// bdlde::Base64DecoderOptions::mime();
173/// @endcode
174/// Then, we check the attributes:
175/// @code
176/// assert(mimeOptions.ignoreMode() ==
177/// bdlde::Base64IgnoreMode::e_IGNORE_WHITESPACE);
178/// assert(mimeOptions.alphabet() == bdlde::Base64Alphabet::e_BASIC);
179/// assert(mimeOptions.isPadded() == true);
180/// @endcode
181/// Now, we stream the object:
182/// @code
183/// mimeOptions.print(cout);
184/// @endcode
185/// Finally, we observe the output:
186/// @code
187/// [
188/// ignoreMode = IGNORE_WHITESPACE
189/// alphabet = BASIC
190/// isPadded = true
191/// ]
192/// @endcode
193///
194/// ### Example 2: {#bdlde_base64decoderoptions-example-2}
195///
196///
197/// Suppose we want a `Base64DecoderOptions` object configured for translating
198/// URL's. That would mean `alphabet == e_URL`, `isPadded == false`, and
199/// ignoring neither unrecognized characters nor whitespace.
200///
201/// First, the class method `urlSafe` returns an object configured exactly that
202/// way, so we simply call it:
203/// @code
204/// const bdlde::Base64DecoderOptions& urlOptions =
205/// bdlde::Base64DecoderOptions::urlSafe();
206/// @endcode
207/// Then, we check the attributes:
208/// @code
209/// assert(urlOptions.ignoreMode() == bdlde::Base64IgnoreMode::e_IGNORE_NONE);
210/// assert(urlOptions.alphabet() == bdlde::Base64Alphabet::e_URL);
211/// assert(urlOptions.isPadded() == false);
212/// @endcode
213/// Now, we stream the object:
214/// @code
215/// urlOptions.print(cout);
216/// @endcode
217/// Finally, we observe the output:
218/// @code
219/// [
220/// ignoreMode = IGNORE_NONE
221/// alphabet = URL
222/// isPadded = false
223/// ]
224/// @endcode
225///
226/// ### Example 3: {#bdlde_base64decoderoptions-example-3}
227///
228///
229/// Suppose we want an options object configured for standard Base64:
230///
231/// First, we can simply call the `standard` class method:
232/// @code
233/// const bdlde::Base64DecoderOptions& standardOptions =
234/// bdlde::Base64DecoderOptions::standard();
235/// @endcode
236/// Then, we check the attributes:
237/// @code
238/// assert(standardOptions.ignoreMode() ==
239/// bdlde::Base64IgnoreMode::e_IGNORE_NONE);
240/// assert(standardOptions.alphabet() ==
241/// bdlde::Base64Alphabet::e_BASIC);
242/// assert(standardOptions.isPadded() == true);
243/// @endcode
244/// Now, we stream the object:
245/// @code
246/// standardOptions.print(cout);
247/// @endcode
248/// Finally, we observe the output:
249/// @code
250/// [
251/// ignoreMode = IGNORE_NONE
252/// alphabet = BASIC
253/// isPadded = true
254/// ]
255/// @endcode
256///
257/// ### Example 4: {#bdlde_base64decoderoptions-example-4}
258///
259///
260/// Suppose we want a really strangely configured options object with
261/// `alphabet == e_URL`, and padding, and ignoring neither unrecognized
262/// characters nor whitespace.
263///
264/// First, we can simply call the `custom` class method. The `padded` and
265/// `unrecognizedIsError == true` arguments are last, and they default to
266/// `true`, so we don't have to pass that.
267/// @code
268/// const bdlde::Base64DecoderOptions& customOptions =
269/// bdlde::Base64DecoderOptions::custom(
270/// bdlde::Base64IgnoreMode::e_IGNORE_NONE,
271/// bdlde::Base64Alphabet::e_URL,
272/// true);
273/// @endcode
274/// Then, we check the attributes:
275/// @code
276/// assert(customOptions.ignoreMode() ==
277/// bdlde::Base64IgnoreMode::e_IGNORE_NONE);
278/// assert(customOptions.alphabet() == bdlde::Base64Alphabet::e_URL);
279/// assert(customOptions.isPadded() == true);
280/// @endcode
281/// Now, we stream the object:
282/// @code
283/// cout << customOptions << endl;
284/// @endcode
285/// Finally, we observe the output:
286/// @code
287/// [ ignoreMode = IGNORE_NONE alphabet = URL isPadded = true ]
288/// @endcode
289/// @}
290/** @} */
291/** @} */
292
293/** @addtogroup bdl
294 * @{
295 */
296/** @addtogroup bdlde
297 * @{
298 */
299/** @addtogroup bdlde_base64decoderoptions
300 * @{
301 */
302
303#include <bdlde_base64alphabet.h>
305
307
308#include <bsls_assert.h>
309
310#include <bsl_iosfwd.h>
311
312
313namespace bdlde {
314
315 // ==========================
316 // class Base64DecoderOptions
317 // ==========================
318
319/// This `class` stores the configuration of a `Base64Decoder`.
320///
321/// See @ref bdlde_base64decoderoptions
323
325
326 // DATA
327 IgnoreMode::Enum d_ignoreMode; // what types of chars, if any, are
328 // ignored
329 Base64Alphabet::Enum d_alphabet; // alphabet -- basic or url
330 bool d_isPadded; // is input padded with '='?
331
332 private:
333 // PRIVATE CREATORS
334
335 /// Create a `Base64DecoderOptions` object having the specified `alphabet`,
336 /// `padded`, and `ignoreMode` attribute values.
337 ///
338 /// \pre The behavior is undefined unless `alphabet` is a defined value of `Base64Alphabet::Enum` and
339 /// `ignoreMode` is a defined value of `Base64IgnoreMode::Enum`.
342 bool padded);
343
344 public:
345 // CLASS METHODS
346
347 /// Return a `Base64DecoderOptions` object having the specified `alphabet`,
348 /// `padded`, and `ignoreMode` attribute values. The behavior is unless
349 /// `ignoreMode` is a defined value of `IgnoreMode`, and `alphabet` is a
350 /// defined value of `Base64Alphabet::Enum`.
351 static
355 bool padded);
356
357 /// Return a `Base64DecoderOptions` object having the attributes
358 /// `alphabet == Base64Alphabet::e_BASIC`, `isPadded == true`, and the
359 /// specified `ignoreMode`. If `ignoreMode` is not specified, it
360 /// defaults to `e_IGNORE_WHITESPACE`. This conforms to RFC 2045.
361 static
364
365 /// Return a `Base64DecoderOptions` object having the specified
366 /// `ignoreMode` and `padded`, and the attribute
367 /// `alphabet == Base64Alphabet::e_BASIC`. If `padded` is not
368 /// specified, it defaults to `true`. If `ignoreMode` is not specified,
369 /// it defaults to `e_IGNORE_NOTHING`. This conforms to RFC 4648
370 /// section 4.
371 static
374 bool padded = true);
375
376 /// Return a `Base64DecoderOptions` object having the attributes
377 /// `alphabet == Base64Alphabet::e_URL`, `isPadded == false` and the
378 /// specified `ignoreMode`. If `ignoreMode` is not specified, it
379 /// defaults to `e_IGNORE_NOTHING`. This conforms to RFC 4648 section
380 /// 5.
381 static
384 bool padded = false);
385
386 // CREATORS
387
388 /// Default copy constructor.
390
391 /// Destroy this object.
393
394 // MANIPULATORS
395
396 /// Default operator=().
398
399 /// Set the `alphabet` attribute to the specified `value`.
400 ///
401 /// \pre The behavior is undefined unless `value` is either `e_BASIC` or `e_UTL`.
403
404 /// Set the `ignoreMode` attribute to the specified `value`.
405 ///
406 /// \pre The behavior is undefined unless `value` is valid value of the
407 /// `IgnoreMode` enum.
409
410 /// Set the `isPadded` attribute to the specified `value`.
411 void setIsPadded(bool value);
412
413 // ACCESSORS
414
415 /// Format this object to the specified output `stream` at the optionally
416 /// specified indentation `level` and return a reference to the modifiable
417 /// `stream`. If `level` is specified, optionally specify
418 /// `spacesPerLevel`, the number of spaces per indentation level for this
419 /// and all of its nested objects. Each line is indented by the absolute
420 /// value of `level * spacesPerLevel`. If `level` is negative, suppress
421 /// indentation of the first line. If `spacesPerLevel` is negative,
422 /// suppress line breaks and format the entire output on one line. If
423 /// `stream` is initially invalid, this operation has no effect.
424 ///
425 /// \note Note that a trailing newline is provided in multiline mode only.
426 bsl::ostream& print(bsl::ostream& stream,
427 int level = 0,
428 int spacesPerLevel = 4) const;
429
430 /// Return the value of the `alphabet` attribute.
432
433 /// Return the value of the `ignoreMode` attribute.
435
436 /// Return the value of the `isPadded` attribute.
437 bool isPadded() const;
438};
439
440// FREE OPERATORS
441
442/// Return `true` if the specified `lhs` and `rhs` attribute objects have the
443/// same value, and `false` otherwise. Two attribute objects have the same
444/// value if each respective attribute has the same value.
445bool operator==(const Base64DecoderOptions& lhs,
446 const Base64DecoderOptions& rhs);
447
448/// Return `true` if the specified `lhs` and `rhs` attribute objects do not
449/// have the same value, and `false` otherwise. Two attribute objects do not
450/// have the same value if one or more respective attributes differ in values.
451bool operator!=(const Base64DecoderOptions& lhs,
452 const Base64DecoderOptions& rhs);
453
454/// Format the specified `rhs` to the specified output `stream` and return a
455/// reference to the modifiable `stream`.
456bsl::ostream& operator<<(bsl::ostream& stream,
457 const Base64DecoderOptions& rhs);
458
459} // close package namespace
460
461
462// TRAITS
463namespace bsl {
464
465template <>
468
469
470} // close namespace bsl
471
472// ============================================================================
473// INLINE FUNCTION DEFINITIONS
474// ============================================================================
475
476
477namespace bdlde {
478
479 // --------------------------
480 // class Base64DecoderOptions
481 // --------------------------
482
483// PRIVATE CREATORS
484inline
485Base64DecoderOptions::Base64DecoderOptions(IgnoreMode::Enum ignoreMode,
486 Base64Alphabet::Enum alphabet,
487 bool padded)
488: d_ignoreMode(ignoreMode)
489, d_alphabet(alphabet)
490, d_isPadded(padded)
491{
492 BSLS_ASSERT(Base64IgnoreMode::e_IGNORE_NONE == ignoreMode ||
493 Base64IgnoreMode::e_IGNORE_WHITESPACE == ignoreMode ||
494 Base64IgnoreMode::e_IGNORE_UNRECOGNIZED == ignoreMode);
495 BSLS_ASSERT(Base64Alphabet::e_BASIC == alphabet ||
496 Base64Alphabet::e_URL == alphabet);
497}
498
499// CLASS METHODS
500inline
501Base64DecoderOptions Base64DecoderOptions::custom(
502 IgnoreMode::Enum ignoreMode,
503 Base64Alphabet::Enum alphabet,
504 bool padded)
505{
506 return Base64DecoderOptions(ignoreMode,
507 alphabet,
508 padded);
509}
510
511inline
512Base64DecoderOptions Base64DecoderOptions::mime(IgnoreMode::Enum ignoreMode)
513{
514 return Base64DecoderOptions(ignoreMode,
515 Base64Alphabet::e_BASIC,
516 true);
517}
518
519inline
520Base64DecoderOptions Base64DecoderOptions::standard(
521 IgnoreMode::Enum ignoreMode,
522 bool padded)
523{
524 return Base64DecoderOptions(ignoreMode,
525 Base64Alphabet::e_BASIC,
526 padded);
527}
528
529inline
530Base64DecoderOptions Base64DecoderOptions::urlSafe(IgnoreMode::Enum ignoreMode,
531 bool padded)
532{
533 return Base64DecoderOptions(ignoreMode,
534 Base64Alphabet::e_URL,
535 padded);
536}
537
538// MANIPULATORS
539inline
540void Base64DecoderOptions::setAlphabet(Base64Alphabet::Enum value)
541{
542 BSLS_ASSERT(Base64Alphabet::e_BASIC == value ||
543 Base64Alphabet::e_URL == value);
544
545 d_alphabet = value;
546}
547
548inline
549void Base64DecoderOptions::setIsPadded(bool value)
550{
551 d_isPadded = value;
552}
553
554inline
555void Base64DecoderOptions::setIgnoreMode(IgnoreMode::Enum value)
556{
557 BSLS_ASSERT(static_cast<unsigned>(value) <= 2);
558
559 d_ignoreMode = value;
560}
561
562// ACCESSORS
563inline
564Base64Alphabet::Enum Base64DecoderOptions::alphabet() const
565{
566 return d_alphabet;
567}
568
569inline
570Base64IgnoreMode::Enum Base64DecoderOptions::ignoreMode() const
571{
572 return d_ignoreMode;
573}
574
575inline
576bool Base64DecoderOptions::isPadded() const
577{
578 return d_isPadded;
579}
580
581} // close package namespace
582
583
584#endif
585
586// ----------------------------------------------------------------------------
587// Copyright 2022 Bloomberg Finance L.P.
588//
589// Licensed under the Apache License, Version 2.0 (the "License");
590// you may not use this file except in compliance with the License.
591// You may obtain a copy of the License at
592//
593// http://www.apache.org/licenses/LICENSE-2.0
594//
595// Unless required by applicable law or agreed to in writing, software
596// distributed under the License is distributed on an "AS IS" BASIS,
597// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
598// See the License for the specific language governing permissions and
599// limitations under the License.
600// ----------------------------- END-OF-FILE ----------------------------------
601
602/** @} */
603/** @} */
604/** @} */
Definition bdlde_base64decoderoptions.h:322
Base64DecoderOptions & operator=(const Base64DecoderOptions &)=default
Default operator=().
Base64Alphabet::Enum alphabet() const
Return the value of the alphabet attribute.
Definition bdlde_base64decoderoptions.h:564
static Base64DecoderOptions urlSafe(IgnoreMode::Enum ignoreMode=IgnoreMode::e_IGNORE_NONE, bool padded=false)
Definition bdlde_base64decoderoptions.h:530
void setIsPadded(bool value)
Set the isPadded attribute to the specified value.
Definition bdlde_base64decoderoptions.h:549
void setAlphabet(Base64Alphabet::Enum value)
Definition bdlde_base64decoderoptions.h:540
void setIgnoreMode(IgnoreMode::Enum value)
Definition bdlde_base64decoderoptions.h:555
static Base64DecoderOptions custom(IgnoreMode::Enum ignoreMode, Base64Alphabet::Enum alphabet, bool padded)
Definition bdlde_base64decoderoptions.h:501
static Base64DecoderOptions mime(IgnoreMode::Enum ignoreMode=IgnoreMode::e_IGNORE_WHITESPACE)
Definition bdlde_base64decoderoptions.h:512
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Base64DecoderOptions(const Base64DecoderOptions &)=default
Default copy constructor.
IgnoreMode::Enum ignoreMode() const
Return the value of the ignoreMode attribute.
Definition bdlde_base64decoderoptions.h:570
~Base64DecoderOptions()=default
Destroy this object.
static Base64DecoderOptions standard(IgnoreMode::Enum ignoreMode=IgnoreMode::e_IGNORE_NONE, bool padded=true)
Definition bdlde_base64decoderoptions.h:520
bool isPadded() const
Return the value of the isPadded attribute.
Definition bdlde_base64decoderoptions.h:576
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT_RCSID(tag, str)
BSLS_IDENT_RCSID() - insert ident str (specific to platform/compiler)
Definition bsls_ident.h:244
#define BSLS_IDENT_PRAGMA_ONCE
BSLS_IDENT_PRAGMA_ONCE - macro to avoid multiple inclusion
Definition bsls_ident.h:263
Definition bdlde_base64alphabet.h:118
bsl::ostream & operator<<(bsl::ostream &stream, Base64Alphabet::Enum value)
Definition bdlat_valuetypefunctions.h:939
Enum
Definition bdlde_base64alphabet.h:137
Definition bdlde_base64ignoremode.h:135
Enum
Definition bdlde_base64ignoremode.h:138
@ e_IGNORE_WHITESPACE
Definition bdlde_base64ignoremode.h:141
@ e_IGNORE_NONE
Definition bdlde_base64ignoremode.h:138
Definition bslmf_istriviallycopyable.h:324