Dinkum Compleat Libraries
Use of this Dinkum? Compleat Libraries
Reference is subject to limitations. See the
Copyright © 1992-2006
for detailed restrictions.
Table of Contents
· Introduction
· Standard C++ Library
· Standard C Library
· ISO Technical Reports
· Additional Libraries
· Compatibility Extensions
· Embedded C++ Library
· C Locales
· Overviews
· This Implementation
The Dinkum Compleat Libraries are organized into a number of
headers,
files that you include in your program to
declare or define library facilities. Thus, most of the
material in this Library Reference is organized by headers,
listed below to simplify top-down searching.
To search bottom up for a specific name or term, see the
Index.
C++ Headers:
<algorithm>
· "Dinkum/allocators"
· <array>
· <bitset>
· <cassert>
· <ccomplex>
· <cctype>
· <cerrno>
· <cfenv>
· <cfloat>
· <cinttype>
· <ciso646>
· <climits>
· <clocale>
· <cmath>
· <complex>
· "Dinkum/threads/condition"
· <csetjmp>
· <csignal>
· <cstdarg>
· <ccstdbool>
· <cstddef>
· <cstdint>
· <cstdio>
· <cstdlib>
· <cstring>
· <ctgmath>
· <ctime>
· <cwchar>
· <cwctype>
· <deque>
· <exception>
· "Dinkum/threads/exceptions"
· <fstream>
· <fstream.h>
· <functional>
· <hardware>
· <hash_map>
· <hash_set>
· <iomanip>
· <iomanip.h>
· <ios>
· <iosfwd>
· <iostream>
· <iostream.h>
· <istream>
· <iterator>
· <limits>
· <list>
· <locale>
· <map>
· <memory>
· "Dinkum/threads/mutex"
· <new>
· <new.h>
· <numeric>
· "Dinkum/threads/once"
· <ostream>
· <queue>
· <random>
· "Dinkum/threads/recursive_mutex"
· <regex>
· <set>
· <slist>
· <sstream>
· <stack>
· <stdexcept>
· <streambuf>
· <string>
· <strstream>
· "Dinkum/threads/thread"
· "Dinkum/threads/tss"
· <tuple>
· <typeinfo>
· <type_traits>
· <unordered_map>
· <unordered_set>
· <utility>
· <valarray>
· <vector>
· "Dinkum/codecvt/wbuffer"
· "Dinkum/codecvt/wstring"
· "Dinkum/threads/xtime"
C++ Code Conversion Headers (in Dinkum/codecvt):
"8859_1"
· "8859_2"
· "8859_3"
· "8859_4"
· "8859_5"
· "8859_6"
· "8859_7"
· "8859_8"
· "8859_9"
· "8859_10"
· "8859_13"
· "8859_14"
· "8859_15"
· "8859_16"
· "baltic"
· "big5"
· "cp037"
· "cp1006"
· "cp1026"
· "cp1250"
· "cp1251"
· "cp1252"
· "cp1253"
· "cp1254"
· "cp1255"
· "cp1256"
· "cp1257"
· "cp1258"
· "cp424"
· "cp437"
· "cp500"
· "cp737"
· "cp775"
· "cp850"
· "cp852"
· "cp855"
· "cp856"
· "cp857"
· "cp860"
· "cp861"
· "cp862"
· "cp863"
· "cp864"
· "cp865"
· "cp866"
· "cp869"
· "cp874"
· "cp875"
· "cp932"
· "cp936"
· "cp949"
· "cp950"
· "cyrillic"
· "ebcdic"
· "euc"
· "euc_0208"
· "gb12345"
· "gb2312"
· "greek"
· "iceland"
· "jis"
· "jis0201"
· "jis_0208"
· "ksc5601"
· "latin2"
· "one_one"
· "roman"
· "sjis"
· "sjis_0208"
· "turkish"
· "utf16"
· "utf8"
· "utf8_utf16"
C Headers:
<assert.h>
· <complex.h>
· <ctype.h>
· <errno.h>
· <fenv.h>
· <float.h>
· <inttypes.h>
· <iohw.h>
· <iso646.h>
· <limits.h>
· <locale.h>
· <math.h>
· <setjmp.h>
· <signal.h>
· <stdarg.h>
· <stdbool.h>
· <stddef.h>
· <stdfix.h>
· <stdint.h>
· <stdio.h>
· <stdlib.h>
· <string.h>
· <tgmath.h>
· "Dinkum/threads/threads.h"
· <time.h>
· <uchar.h>
· <wchar.h>
· <wctype.h>
· "Dinkum/threads/xtime.h"
Overviews:
C++ Library Overview
· C Library Overview
· Characters
· Files and Streams
· Formatted Output
· Formatted Input
· Locale Definitions
· STL Conventions
· STL Containers
· Thread Safety
The Dinkum Compleat Libraries are a collection of several
C and C++ libraries, all based on ISO standards.
These libraries include a large number of functions
that perform essential services such as input/output
and storage allocation.
They also provide efficient implementations
of frequently used operations. Numerous other function and class definitions
accompany these functions to help you to make better use of the library.
In one coherent package, you get:
- A completely conforming implementation of the
Standard C++ library,
ISO/IEC 14882:1998, as corrected through 2003.
- A completely conforming implementation of the
Standard C library
ISO/IEC 9899:1999, as corrected through 2003.
- A completely conforming implementation of
the C++ Library Technical Report #1,
TR19768, or simply TR1 for short,
which adds considerable functionality to the Standard C++ library.
- A completely conforming implementation of the libraries
for all other
C and C++ Technical Reports
approved and corrected through 2005.
- Useful additions
to the Standard C and C++ libraries
to facilitate writing multithreaded code, converting between
various forms of Unicode, and managing storage for containers.
- Common extensions
to the Standard C and C++ libraries to simplify
adapting code written for Linux and Windows,
for open-source Standard C++ libraries, and for pre-standard dialects.
- A complete implementation of the
Embedded C++ library,
the most widely used C++ subset in embedded systems programming,
that can also interoperate with the Standard Template Library
(STL).
- Dozens of definitions for C locales,
so that the Standard C library
can adapt to all major American and European cultures.
The Dinkum Compleat Libraries provide a rich, high quality, development
envorinment across all the most popular computing platforms.
In most cases, it can be configured to use either the native C library
(for maximum access to traditional, nonstandard library extensions)
or the Dinkumware Standard C library (for maximum conformance and
portability). Installing the Dinkum Compleat Libraries never
alters any existing compiler or library files; they are packaged
as a pure bolt-on. Thus, the Dinkum Compleat Libraries offer a low-risk
way to improve practically any platform, and dramatically lower the
cost of moving code between platforms.
The Libraries have been tested on a variety of compilers:
- Microsoft Visual C++ compilers V6, V7 (.NET), V7.1 (.NET 2003),
V8 (.NET 2005), and Embedded Visual C++ compilers from V3 onward.
- GCC compilers from V3 onward on PC Linux, Sparc Solaris,
Mac OS/X, and Microsoft Windows.
- Sun C++ compilers from V5.7 onward on Sparc Solaris.
- Compilers that use the front end from
Edison Design Group (EDG).
Many of these compilers have serious deficiencies in the conformance,
correctness, and/or performance of their C and C++ libraries.
Even those equipped with various versions of Dinkumware C and C++ libraries
can benefit from the extra features, latest improvements, and uniformity
offered with the Dinkum Compleat Libraries.
Note that not all compilers support the language features
required to support all features in the Dinkum Compleat Libraries.
The Library often provides reasonable alternative forms
to avoid missing language features, but that is not always possible.
As a general rule, you can expect reasonably complete library
functionality when using Microsoft Visual C++ compilers from V7.1 onward,
GCC compilers from V3.0 onward, and all compilers using the EDG front end.
Only EDG compilers offer complete Standard C and C++ conformance
(when used with Dinkumware libraries),
and only EDG V3.5 and later supports fixed-point arithmetic (TR18037).
The Dinkum Compleat Libraries offer a number of unique advantages:
- Dinkumware's Standard C++ library is the only such library
to score near perfect conformance with the C++VS validation suite from
Perennial, Inc..
- Dinkumware's Standard C++ library is the only such library
to support separate compilation of templates
(when used with the EDG front end).
- Dinkumware's Standard C library is the first such library
to be validated for perfect compliance with Perennial's CVSA
validation suite.
- Dinkumware's Standard C library is the only such library
to offer full support for all math functions in all four popular
IEC 60559 (IEEE 754) floating-point formats -- 32-bit, 64-bit, 80-bit, and
128-bit -- all extensively tested for accuracy and conformance
to optional real and complex floating-point requirements.
- Dinkumware's Standard C library is the only C99 library
not bundled with a specific compiler.
- Dinkumware's TR1 (TR19768) library is the only
complete implementation, including special math support and
C99 library integration.
- Dinkumware's fixed-point arithmetic (TR18037) library is the only
such library not bundled with a specific compiler.
- Dinkumware's Embedded C++ library is the only such library
to score near perfect conformance with Perennial's EC++VS
validation suite.
- Dinkumware's Embedded C++ library is the only such library
not bundled with a specific compiler.
Finally, Dinkumware, Ltd. is the only
remaining independent commercial source for Standard C and C++
libraries. You can find bits and pieces available
as open source, with varying
degrees of quality and varying licenseing restrictions;
but only Dinkumware offers the security
that comes with commercial licensing and support from a
single vendor. The Library
contains no open source and no code subject to
restrictive open source licensing; the entire product is
covered by one comprehensive license agreement.
And we ask no additional royalty for the distribution of
executables linked with our libraries.
Founded in 1995, Dinkumware, Ltd. supplies the Standard C
and C++ libraries used by the leading compiler vendors for
both desktop and embedded program development. Our OEM customers
include most major vendors of compilers for desktop and
embedded systems program development, including
Microsoft, IBM, Borland, Green Hills, WindRiver, and many
more. We also license directly to developers through our web
site, from individuals to shops with hundreds of programmers.
Thus, Dinkumware has a well deserved reputation for
producing the highest quality libraries and providing the
most comprehensive support available, for customers of all
sizes.
The Standard C++ library consists of 51 headers.
Of these, 16 constitute the
Standard Template Library, or
STL.
These are indicated below with the notation (STL):
<algorithm>
-- (STL) for defining numerous templates that implement useful algorithms
<bitset>
-- for defining a template class that administers sets of bits
<complex>
-- for defining a template class that supports complex arithmetic
<deque>
-- (STL) for defining a template class that implements a deque container
<exception>
-- for defining several functions that control exception handling
<fstream>
-- for defining several iostreams template classes that manipulate
external files
<functional>
-- (STL) for defining several templates that help construct predicates
for the templates defined in
<algorithm> and
<numeric>
<iomanip>
-- for declaring several iostreams manipulators that take an argument
<ios>
-- for defining the template class that serves as the base for
many iostreams classes
<iosfwd>
-- for declaring several iostreams template classes before they
are necessarily defined
<iostream>
-- for declaring the iostreams objects that manipulate the
standard streams
<istream>
-- for defining the template class that performs extractions
<iterator>
-- (STL) for defining several templates that help define and manipulate
iterators
<limits>
-- for testing numeric type properties
<list>
-- (STL) for defining a template class that implements
a doubly linked list container
<locale>
-- for defining several classes and templates that control
locale-specific behavior, as in the iostreams classes
<map>
-- (STL) for defining template classes that implement associative containers
that map keys to values
<memory>
-- (STL) for defining several templates that allocate and free storage
for various container classes
<new>
-- for declaring several functions that allocate and free storage
<numeric>
-- (STL) for defining several templates that implement useful numeric functions
<ostream>
-- for defining the template class that performs insertions
<queue>
-- (STL) for defining a template class that implements a queue container
<set>
-- (STL) for defining template classes that implement associative containers
a singly linked list container
<sstream>
-- for defining several iostreams template classes that manipulate
string containers
<stack>
-- (STL) for defining a template class that implements a stack container
<stdexcept>
-- for defining several classes useful for reporting exceptions
<streambuf>
-- for defining template classes that buffer iostreams operations
<string>
-- for defining a template class that implements a string container
<strstream>
-- for defining several iostreams classes that manipulate in-memory
character sequences
<typeinfo>
-- for defining class type_info, the result of the
typeid operator
<utility>
-- (STL) for defining several templates of general utility
<valarray>
-- for defining several classes and template classes that
support value-oriented arrays
<vector>
-- (STL) for defining a template class that implements a vector container
The Standard C++ library works in conjunction with the
headers from the
Standard C library,
sometimes with small alterations.
The headers come in two forms, new (C++) and traditional (C).
The new-form headers are:
<cassert>
-- for enforcing assertions when functions execute
<ccomplex>
-- for performing complex arithmetic
<cctype>
-- for classifying characters
<cerrno>
-- for testing error codes reported by library functions
<cfenv>
-- for controlling IEEE-style floating-point arithmetic
<cfloat>
-- for testing floating-point type properties
<cinttype.h>
-- for converting various integer types
<ciso646>
-- for programming in ISO 646 variant character sets
<climits>
-- for testing integer type properties
<clocale>
-- for adapting to different cultural conventions
<cmath>
-- for computing common mathematical functions
<csetjmp>
-- for executing nonlocal goto statements
<csignal>
-- for controlling various exceptional conditions
<cstdarg>
-- for accessing a varying number of arguments
<cstdbool.h>
-- for defining a convenient Boolean type name and constants
<cstddef>
-- for defining several useful types and macros
<cstdint.h>
-- for defining various integer types with size constraints
<cstdio>
-- for performing input and output
<cstdlib>
-- for performing a variety of operations
<cstring>
-- for manipulating several kinds of strings
<ctgmath.h>
<ctime>
-- for converting between various time and date formats
<cwchar>
-- for manipulating
wide streams and
several kinds of strings
<cwctype>
-- for classifying
wide characters
The traditional
Standard C library headers, which is
also a part of the Standard C++ Library, are:
<assert.h>
-- for enforcing assertions when functions execute
<complex.h>
-- for performing complex arithmetic
<ctype.h>
-- for classifying characters
<errno.h>
-- for testing error codes reported by library functions
<fenv.h>
-- for controlling IEEE-style floating-point arithmetic
<float.h>
-- for testing floating-point type properties
<inttypes.h>
-- for converting various integer types
<iohw.h>
[added with TR18015/TR18037]
-- for writing portable I/O hardware drivers in C
<iso646.h>
-- for programming in ISO 646 variant character sets
<limits.h>
-- for testing integer type properties
<locale.h>
-- for adapting to different cultural conventions
<math.h>
-- for computing common mathematical functions
<setjmp.h>
-- for executing nonlocal goto statements
<signal.h>
-- for controlling various exceptional conditions
<stdarg.h>
-- for accessing a varying number of arguments
<stdbool.h>
-- for defining a convenient Boolean type name and constants
<stddef.h>
-- for defining several useful types and macros
<stdint.h>
-- for defining various integer types with size constraints
<stdio.h>
-- for performing input and output
<stdlib.h>
-- for performing a variety of operations
<string.h>
-- for manipulating several kinds of strings
<tgmath.h>
-- for declaring various type-generic math functions
<time.h>
-- for converting between various time and date formats
<uchar.h>
[added with TR19769]
-- for manipulating 16-bit and 32-bit UNICODE wide characters
<wchar.h>
-- for manipulating
wide streams and
several kinds of strings
<wctype.h>
-- for classifying
wide characters
The Dinkum Compleat Libraries include
several headers, not required by the C Standard or
the C++ Standard, but defined in ISO Technical Reports:
<hardware>
[added with TR18015]
-- for writing portable I/O hardware drivers in C++
<iohw.h>
[added with TR18015/TR18037]
-- for writing portable I/O hardware drivers in C
<stdfix.h>
[added with TR18037]
-- for performing fixed-point arithmetic in C
<uchar.h>
[added with TR19769]
-- for manipulating 16-bit and 32-bit Unicode wide characters in C
By far the largest library addition, however, comes with
TR19768, usually referred to as C++ Library Technical Report #1, or
TR1. The additions are extensive.
Some contribute to existing headers, others take the form of
new headers. The contributions from TR1 to existing headers are in:
<cmath> and
<math.h>
-- for computing a number of additional math functions,
usually called "special math" functions
(such as Bessel functions)
<functional>
-- for defining several templates that help construct predicates
for the templates defined in <algorithm>
and <numeric>
<memory>
-- for defining templates that use reference counting to manage resources
<utility>
-- for defining two tuple-like templates that provide information
about the contents of instances of std::pair.
The new headers added with TR1 are:
<array>
-- for defining a fixed-size array with a container-like interface
<random>
-- for defining random number generators
<regex>
-- for defining a regular-expression matcher
<tuple>
-- for defining an ordered collection of subobjects
<type_traits>
-- for accessing detailed type information at compile time to
support generic programming
<unordered_map>
-- (STL) for defining template classes that implement unordered
associative containers that map keys to values
<unordered_set>
-- (STL) for defining template classes that implement unordered
associative containers
The Dinkum Compleat Libraries include several libraries not
required by ISO standards, but whose presence are suggested,
or even encouraged, by those standards:
- The Dinkum Allocators Library
provides numerous allocators,
template classes modeled after template class
allocator.
You use these to manage memory for node-based
STL containers, such as
listr and
set,
when the default allocator doesn't suffice. This Library
includes allocators that implement half a dozen different
caching strategies, each of which can be qualified by
several different synchronization strategies (including none)
for multithreading environments.
- The Dinkum Conversions Library
provides over six dozen code conversion facets,
template classes derived from an instantiation of template class
codecvt.
You use these to convert between multibyte and wide-character
encodings while performing file input and output. This Library
makes it easy to work with all the popular variants of Unicode,
as well as older character encodings that are still in use.
It also includes template classes for performing such conversions
inside a program, not just when reading and writing files.
- The Dinkum Threads Library
lets you create and control multiple threads of execution,
to take advantage of multithreading environments such as Linux,
Unix, and Windows. You get both a C version, modeled cloaely after
the facilities in the
Posix
Standard, and a C++ version, modeled closely after the
facilities in the
Boost.Threads
library. The Library works correctly on both single-processor and
multi-processor systems.
The Dinkum Compleat Libraries include several headers
that provide extensions frequently found in other C++ libraries:
<hash_map>
-- (STL) for defining template classes that implement hashed
associative containers that map keys to values (also includes
an STLport-compatible adapter)
<hash_set>
-- (STL) for defining template classes that implement hashed
associative containers (also includes an STLport-compatible adapter)
<slist>
-- (STL) for defining a template class that implements
a singly linked list container
The Library also includes several headers
for compatibility with traditional (pre-standard) C++ libraries:
<fstream.h>
-- for defining several iostreams template classes that manipulate
external files
<iomanip.h>
-- for declaring several iostreams manipulators that take an argument
<iostream.h>
-- for declaring the iostreams objects that manipulate the
standard streams
<new.h>
-- for declaring several functions that allocate and free storage
The Dinkum Compleat Libraries include a subset specifically
designed for embedded systems programming called
the Embedded C++ Library. It conforms to an industry
specification
developed in 1997 by a consortium of mostly Japanese companies, and has
become the subset of choice for most embedded compiler vendors.
You can mix STL code with the Embedded C++
Library to write powerful but lean applications in C++.
For clarity, this library is described in a separate
Embedded C++ Library Reference.
The Standard C library has the ability to adapt at
runtime to different locales you can specify in a
locale definition file. The Dinkum Compleat Libraries
include about five dozen such
locale definitions,
covering all major American and European
cultures, that you can use to tailor a locale definition file
for use with executables.
Other information on the Standard C and C++ libraries includes
several overviews:
C++ Library Overview --
how to use the Standard C++ library, including alternative
mechanisms for handling exceptions
C Library Overview --
how to use the Standard C library, including what happens at
program startup and at
program termination
Characters --
how to write
character constants and
string literals, and how to
convert between
multibyte characters and
wide characters
Files and Streams --
how to read and write data between the program and
files
Formatted Output --
how to generate text under control of a
format string
Formatted Input --
how to scan and parse text under control of a
format string
STL Conventions --
how to read the descriptions of
STL template classes and functions
STL Containers --
how to use an arbitrary
STL container template class
Thread Safety --
how to write code that is safe in a multithreaded environment
As much as possible, this Reference indicates any extensions
to standard-conforming behavior particular to this
implementation.
Moreover, even though the C++ Standard
is no longer new, not all compilers support all the features
described here. Hence, this implementation introduces macros,
or alternative declarations, where necessary to provide reasonable
substitutes for the capabilities required by the C++ Standard.
See also the
Index.
Copyright © 1992-2006
by Dinkumware, Ltd. All rights reserved.