|
Boost-Commit : |
From: steven_at_[hidden]
Date: 2007-08-30 21:37:01
Author: steven_watanabe
Date: 2007-08-30 21:37:00 EDT (Thu, 30 Aug 2007)
New Revision: 39079
URL: http://svn.boost.org/trac/boost/changeset/39079
Log:
Added documentation of conversions
Text files modified:
sandbox/units/boost/units/heterogeneous_system.hpp | 11 ++++++
sandbox/units/libs/units/doc/units.qbk | 60 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 70 insertions(+), 1 deletions(-)
Modified: sandbox/units/boost/units/heterogeneous_system.hpp
==============================================================================
--- sandbox/units/boost/units/heterogeneous_system.hpp (original)
+++ sandbox/units/boost/units/heterogeneous_system.hpp 2007-08-30 21:37:00 EDT (Thu, 30 Aug 2007)
@@ -292,10 +292,19 @@
> type;
};
-/// Returns a unique type for every unit.
template<class Unit>
struct reduce_unit;
+#ifdef BOOST_UNITS_DOXYGEN
+
+/// Returns a unique type for every unit.
+template<class Unit>
+struct reduce_unit {
+ typedef detail::unspecified type;
+};
+
+#endif
+
/// Returns a unique type for every unit.
template<class Dim, class System>
struct reduce_unit<unit<Dim, System> >
Modified: sandbox/units/libs/units/doc/units.qbk
==============================================================================
--- sandbox/units/libs/units/doc/units.qbk (original)
+++ sandbox/units/libs/units/doc/units.qbk 2007-08-30 21:37:00 EDT (Thu, 30 Aug 2007)
@@ -25,6 +25,8 @@
[def __quantity [classref boost::units::quantity quantity]]
[def __conversion_helper [classref boost::units::conversion_helper conversion_helper]]
[def __absolute [classref boost::units::absolute absolute]]
+[def __base_unit [classref boost::units::base_unit base_unit]]
+[def __scaled_base_unit [classref boost::units::scaled_base_unit base_unit]]
[def __unary_plus_typeof_helper [classref boost::units::unary_plus_typeof_helper unary_plus_typeof_helper]]
[def __unary_minus_typeof_helper [classref boost::units::unary_minus_typeof_helper unary_minus_typeof_helper]]
@@ -53,9 +55,16 @@
[def __from_value [memberref boost::units::quantity::from_value from_value]]
[def __value [memberref boost::units::quantity::value value]]
+[def __reduce_unit [classref boost::units::reduce_unit reduce_unit]]
+[def __unscale [classref boost::units::unscale unscale]]
+
[def __BOOST_UNITS_STATIC_CONSTANT [macroref BOOST_UNITS_STATIC_CONSTANT]]
[def __BOOST_UNITS_ENABLE_IMPLICIT_UNIT_CONVERSIONS [macroref BOOST_UNITS_ENABLE_IMPLICIT_UNIT_CONVERSIONS]]
+[def __BOOST_UNITS_DEFINE_CONVERSION [macroref BOOST_UNITS_DEFINE_CONVERSION]]
+[def __BOOST_UNITS_DEFINE_BASE_CONVERSION [macroref BOOST_UNITS_DEFINE_BASE_CONVERSION]]
+[def __BOOST_UNITS_DEFAULT_CONVERSION [macroref BOOST_UNITS_DEFAULT_CONVERSION]]
+
[section:Introduction Introduction]
The Boost.Units library is a C++ implementation of dimensional analysis in a general
@@ -406,6 +415,57 @@
[endsect]
+[section:Conversions Conversions]
+
+The macros needed for defining conversion can be found in
+[headerref boost/units/conversion.hpp], [headerref boost/units/absolute.hpp]
+(for affine conversions), and [headerref boost/units/implicit_conversion.hpp]
+
+For most purposes [___BOOST_UNITS_DEFINE_BASE_CONVERSION] will be
+sufficient. It defines a conversion between two base units with
+the same dimensions. If you define use different dimensions for
+defining base units then you will need to use the more general form
+[___BOOST_UNITS_DEFINE_CONVERSION] which works for arbitrary units.
+
+If you need to define a conversion as a template then
+you can add _TEMPLATE onto the end of any of the macros.
+
+[warning
+
+[___BOOST_UNITS_DEFINE_CONVERSION] has to apply [___unscale] to its
+parameters. This does not work for templates. You must guarantee
+that you do not pass any [___scaled_base_unit]s to the macro.
+
+]
+
+The macro [___BOOST_UNITS_DEFAULT_CONVERSION] defines a conversion
+that will be applied to a base unit when no direct conversion is
+possible. This can be used to make arbitray conversion work
+with a single specialization.
+
+ struct my_unit_tag : boost::units::base_unit<my_unit_tag, boost::units::force_type, 1> {};
+ // define the conversion factor
+ BOOST_UNITS_DEFINE_CONVERSION(my_unit_tag, SI::force, double, 3.14159265358979323846);
+ // make conversion to SI the default.
+ BOOST_UNITS_DEFAULT_CONVERSION(my_unit_tag, SI::force);
+
+[warning
+
+For all the conversion macros the destination unit needs
+to be reduced to a unique type with [___reduce_unit].
+The template forms cannot do this reduction automatically.
+
+]
+
+The following are the exact rules for conversions.
+First the implementation attempts to find a direct conversion defined
+with [___BOOST_UNITS_DEFINE_CONVERSION] and its kin. If there is no such
+exact conversion then it will look for a definition of some scaled
+form of the conversion. If that also fails then it will transform
+every [___base_unit] using [___BOOST_UNITS_DEFAULT_CONVERSION] and recurse.
+
+[endsect]
+
[section:Examples Examples]
[section:DimensionExample Dimension Example]
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk