BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bsl.h
Go to the documentation of this file.
1/// @file bsl.h
2///
3///
4/// @defgroup bsl Group bsl
5/// @brief Basic Standard Library (bsl)
6/// @addtogroup bsl
7/// @{
8/// * <a href="#bsl-purpose"> Purpose</a>
9/// * <a href="#bsl-mnemonic"> Mnemonic </a>
10/// * <a href="#bsl-description"> Description </a>
11/// * <a href="#bsl-hierarchical-synopsis"> Hierarchical Synopsis </a>
12/// * <a href="#bsl-package-synopsis"> Package Synopsis </a>
13/// * <a href="#bsl-package-overview"> Package Overview </a>
14/// * <a href="#bsl-bsl-bslhdrs"> bsl+bslhdrs </a>
15/// * <a href="#bsl-bslalg"> bslalg </a>
16/// * <a href="#bsl-bsldoc"> bsldoc </a>
17/// * <a href="#bsl-bslfmt"> bslfmt </a>
18/// * <a href="#bsl-bslh"> bslh </a>
19/// * <a href="#bsl-bslim"> bslim </a>
20/// * <a href="#bsl-bslma"> bslma </a>
21/// * <a href="#bsl-bslmf"> bslmf </a>
22/// * <a href="#bsl-bsls"> bsls </a>
23/// * <a href="#bsl-bslscm"> bslscm </a>
24/// * <a href="#bsl-bslstl"> bslstl </a>
25/// * <a href="#bsl-bsltf"> bsltf </a>
26/// * <a href="#bsl-bslx"> bslx </a>
27///
28/// # Purpose {#bsl-purpose}
29/// Provide a comprehensive foundation for component-based development.
30///
31/// # Mnemonic {#bsl-mnemonic}
32/// Basic Standard Library (bsl)
33///
34/// # Description {#bsl-description}
35/// The 'bsl' ("Basic Standard Library") package group contains
36/// various packages that provide platform-specific classes, meta-functions,
37/// defensive programming mechanisms, a framework for component testing, memory
38/// allocation protocols and algorithms, and a C++ standard library
39/// implementation.
40///
41/// Note that the C++ standard library is implemented in the 'bsl' namespace
42/// instead of the standard 'std' namespace. This allow clients to use both the
43/// native compiler provided C++ standard library together with the Bloomberg
44/// provided C++ standard library in the same translation unit.
45///
46/// The 'bsl' package group is the foundation of the firm-wide BDE library and has
47/// no dependencies beyond the allowed OS and runtime environment dependencies.
48///
49/// ## Hierarchical Synopsis {#bsl-hierarchical-synopsis}
50///
51/// The 'bsl' package group currently has 17 packages having 11 levels of physical
52/// dependency. The list below shows the hierarchical ordering of the packages.
53/// The order of packages within each level is not architecturally significant,
54/// just alphabetical.
55/// @code
56/// 11. bslmt
57/// bslx
58///
59/// 10. bslim
60///
61/// 9. bsl+bslhdrs
62///
63/// 8. bslfmt
64/// bslstp !DEPRECATED!
65///
66/// 7. bslstl
67///
68/// 6. bslalg
69///
70/// 5. bslh
71/// bsltf
72///
73/// 4. bslma
74///
75/// 3. bsldoc
76/// bslmf
77///
78/// 2. bsla
79/// bslscm
80///
81/// 1. bslfwd !DEPRECATED!
82/// bsls
83/// @endcode
84/// Note that the 'bsl+stdhdrs' package is only a compatibility layer for
85/// Bloomberg managed code. It is not an essential package for the rest of the
86/// BDE libraries (i.e., all other package groups above 'bsl' will compile and
87/// function without 'bsl+stdhdrs'). This package implements the logic required
88/// for 'BDE-STL' mode.
89///
90/// Note that required source control package 'bslscm' depends on 'bsls'; this
91/// behavior is unique to 'bsl', although it is temporarily also in 'bde' for
92/// historic reasons, since logically *every* other package should depend on
93/// 'bslscm'.
94///
95/// ## Package Synopsis {#bsl-package-synopsis}
96///
97/// 'bsl+bslhdrs':
98/// Provide a compatibility layer to enable BDE-STL mode in Bloomberg.
99///
100/// 'bsla':
101/// Provide macros for portable use of compiler annotations.
102///
103/// 'bslalg':
104/// Provide algorithms and traits used by the BDE STL implementation.
105///
106/// 'bsldoc':
107/// Provide documentation of terms and concepts used throughout BDE.
108///
109/// 'bslfmt':
110/// Provide implementation mechanisms for bsl::format.
111///
112/// 'bslfwd': !DEPRECATED!
113/// Provide compatibility for clients using single-level namespace
114///
115/// 'bslh':
116/// Provide a framework for hashing types using swappable algorithms.
117///
118/// 'bslim':
119/// Provide implementation mechanisms.
120///
121/// 'bslma':
122/// Provide allocators, guards, and other memory-management tools.
123///
124/// 'bslmf':
125/// Provide meta-function versions of useful coding constructs.
126///
127/// 'bslmt':
128/// Support for multi-threading and thread-safe processes.
129///
130/// 'bsls':
131/// Provide system-level utilities for 'bsl'.
132///
133/// 'bslscm':
134/// Provide versioning information for BDE library components.
135///
136/// 'bslstl':
137/// Provide replacement classes for STL constructs.
138///
139/// 'bslstp': !DEPRECATED!
140/// Provide replacement classes (adopted from STLport) for STL.
141///
142/// 'bsltf':
143/// Provide a set of utilities and types to help with testing.
144///
145/// 'bslx':
146/// Define externalization protocols and provide implementations.
147///
148/// ## Package Overview {#bsl-package-overview}
149///
150/// This section provides a brief introduction to the packages of the 'bsl'
151/// package group. Note that several packages, especially at lower levels in the
152/// physical hierarchy, are primarily intended for use by other packages within
153/// 'bsl'. See the respective Package Level documents for more details.
154///
155/// ### bsl+bslhdrs {#bsl-bsl-bslhdrs}
156///
157/// The {'bsl+bslhdrs'} package provides the 'bsl' version of the standard C++
158/// library (e.g., 'bsl_vector.h' instead of 'vector', 'bsl_algorithm.h' instead
159/// of 'algorithm'). Users of 'bsl' can include these headers to obtain the
160/// corresponding C++ STL functionalities.
161///
162/// ### bslalg {#bsl-bslalg}
163///
164/// The {'bslalg'} package provides a variety of lower-level algorithms,
165/// comparisons, and traits.
166///
167/// ### bsldoc {#bsl-bsldoc}
168///
169/// The {'bsldoc'} package documents key terminology and concepts used throughout
170/// BDE documentation. Note that the components in this package consist entirely
171/// of comments, no code.
172///
173/// ### bslfmt {#bsl-bslfmt}
174///
175/// The {'bslfmt'} package provides implementation mechanisms for 'bsl::format',
176/// which is a C++03 compatible implementation of C++20's '<format>'.
177///
178/// ### bslh {#bsl-bslh}
179///
180/// The {'bslh'} package provides standard hashing algorithms and components
181/// allowing the application of those hashing algorithms to types in a modular
182/// way.
183///
184/// ### bslim {#bsl-bslim}
185///
186/// The {'bslim'} package provides implementation mechanisms for features that
187/// must have identical syntax and semantics in many disparate classes.
188///
189/// ### bslma {#bsl-bslma}
190///
191/// {'bslma'} provides memory allocation and related proctor and handle objects.
192///
193/// ### bslmf {#bsl-bslmf}
194///
195/// The {'bslmf'} package provides low-level "meta-functions" implementing
196/// "traits" and other useful properties of types, determined at compile-time.
197///
198/// ### bsls {#bsl-bsls}
199///
200/// The {'bsls'} package provides the needed platform-independent definitions and
201/// utilities (with platform-specific implementations) so that the rest of the bsl
202/// library, and all conforming applications within the Development Framework, can
203/// be written in a truly portable, platform-neutral dialect of C++ -- one having
204/// dependency on 'bsls', but on no other system-specific services. Among the
205/// issues dealt with in 'bsls' are hardware, operating system, and compiler
206/// definitions, "endian-ness" and alignment of type representation in physical
207/// memory, bit-manipulation utilities, and a uniform interface to system services
208/// (e.g., timers).
209///
210/// ### bslscm {#bsl-bslscm}
211///
212/// The {'bslscm'} package contains only two components, @ref bslscm_version and
213/// @ref bslscm_versiontag . The first of these components is included by every other
214/// component in 'bsl', and provides versioning information for the package group.
215/// Users may use the @ref bslscm_version facilities to query a particular 'bsl'
216/// library for its version information. The second component defines macros that
217/// can be used for conditional-compilation based on 'bsl' version information.
218///
219/// ### bslstl {#bsl-bslstl}
220///
221/// The {'bslstl'} package provides implementations of certain containers of the
222/// C++ standard library using the 'bslma' memory allocation model, algorithms and
223/// traits in 'bslalg' and meta-functions in 'bslmf'.
224///
225/// ### bsltf {#bsl-bsltf}
226///
227/// The {'bsltf'} package provides a set test types and utilities that operates on
228/// those types, which can help simplify, particularly for template, the
229/// implementation of test drivers.
230///
231/// ### bslx {#bsl-bslx}
232///
233/// The {'bslx'} package defines (via documentation) the BDEX protocol for
234/// externalization (i.e., for an "out stream") and "unexternalization" (i.e., for
235/// an "in stream"), and provides concrete byte-array-based stream implementations
236/// of each kind of stream, including streams for testing.
237///
238/// @}