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