|
Boost Numeric Conversion Library |
---|
The Boost Numeric Conversion library is a collection of tools to describe and perform conversions between values of different numeric types.
The library includes a special alternative for a subset of std::numeric_limits<>
,
the bounds<>
traits class, which provides
a consistent way to obtain the boundary values for the
range of a numeric type.
It also includes a set of trait classes which describes the compile-time properties of a conversion from a source to a target numeric type. Both arithmetic and user-defined numeric types can be used.
A policy-based converter object which uses conversion_traits
to select an optimized implementation is supplied.
Such implementation uses an optimal range checking code suitable for the source/target combination.
The converter's out-of-range behavior can be customized via an OverflowHandler
policy.
For floating-point to integral conversions, the rounding mode can be selected via
the Float2IntRounder policy.
A custom low-level conversion routine (for UDTs for instance) can be passed
via a RawConverter policy.
The optimized automatic range-checking logic can be overridden via a UserRangeChecker
policy.
Pre-formal review:
Kevlin Henney, with help from David Abrahams and Beman Dawes, originally contributed the previous version of numeric_cast<> which already presented the idea of a runtime range check.
Later, Eric Ford, Kevin Lynch and the author spotted some genericity problems with that numeric_cast<> which prevented it from being used in a generic layer of math functions.
An improved numeric_cast<> which properly handled all combinations of arithmetic types was presented.
David Abrahams and Beman Dawes acknowledged the need of an improved version of numeric_cast<> and supported the submission as originally laid out. Daryl Walker and Darin Adler made some important comments and proposed fixes to the original submission.Special thanks go to Björn Karlsoon who helped the author considerably. Having found the problems with numeric_cast<> himself, he revised very carefully the original submission and spot a subtle bug in the range checking implementation. He also wrote part of this documentation and proof-read and corrected other parts. And most importantly: the features now presented here in this library evolved from the original submission as a result of the useful private communications between Björn and the author.
Post-formal review:
Guillaume Melquiond spoted some documentation and code issues, particularly about rounding conversions.
The following people contributed an important review of the design, documentation and code: Kevin Lynch, Thorsten Ottosen, Paul Bristow,
Daryle Walker, Jhon Torjo, Eric Ford, Gennadiy Rozental.
Revised 23 June 2004
© Copyright Fernando Luis Cacciola Carballal, 2004
Use, modification, and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)