History, Versions and Changes

Previous Versions

Version 1.1 was a revised update of Version 1.0, with many extensions.

Version 1.0 was a major update from earlier versions. In particular many runtime improvements have been added by moving checks to compile time. This has been accomplished using static metaprogramming constructs. The GNU mp package for multiprecision arithmetic is no longer needed. Unfortunately, some changes in the user interface had to be introduced (see User Interface and Low Level Changes).

The present version additionally has been improved internally (see also User Interface and Low Level Changes).

We will define the term `user level interface changes' to changes done in such components of Quantities that are mostly accessed by the end user of the package, while `low level interface changes' deal with improvements of functions that are not normally included in user code directly. Implementation changes leave the overall interface of the package intact. Changes to the build process do not change the code at all, but rather how the package is compiled before use.

Current Version

Current version is version 1.2.2.

User Interface and Low Level Changes

This list is in reverse chronological order.

Changes from Version 1.2.1 to 1.2.2

  1. Implementation changes
  2. Low level interface changes
  3. User level interface changes
  4. Changes of Concepts
  5. Changes to the Build System
  6. Other changes

Changes from Version 1.2 to Version 1.2.1

  1. The code was adapted to gcc compiler version 4.1.2. An incompatibility with earlier compiler versions (for example, 3.3.3) makes two release versions (1-2-1 and 1-2-1-oldgcc) necessary. Make sure that you use the correct version for your compiler.
  2. The pow functions with static and dynamic exponents were re-implemented. No changes to the user interface should be introduced.

Changes from Version 1.1 to Version 1.2

  1. Changed the quantity names of Digital and Empty (deleted `quantity').
  2. New compile time error message: VariableError.
  3. New compile time check: CheckVariableInVectorTuple.
  4. The concepts of parent quantity and abstract base quantity were more clearly separated. The former is the template parameter used for generation of a particular quantity. The quantities related to the parent quantity in this way have all different storage unit and different modes. The latter is the quantity used as base class for the derivation of a particular quantity. Thus, `abstract base quantity' is a purely technical concept, while `parent quantity' is a concept relating several quantities in a problem-specific way.
  5. Two extensions of the quantity concept were started: dedimensionalization and a save/load mechanism with XML support. Both are not yet usable and it is not recommended to rely on the code provided in the present version.
  6. bug fixes

Changes from Version 1.0 to Version 1.1

  1. Concept changes
  2. Low level interface changes
  3. User level interface changes
  4. Other changes

User interface changes with Version 1.0

  1. The package is configured for the use of the GNU autotools. Thus, configuration is more simple, and maybe even more platform independent. Makefile.am and configure.in as well as other necessary files are provided in the distribution.
  2. The DimensionMismatch exception is now obsolete. Such mismatched are already detected at compile time, and can never occur in a running program.
  3. Input and output through functions in and out, and using pairs is now obsolete. Use VariableTuples constructs instead.
  4. If a unit is used in a constructor, such as in
    Time t (5.0, Second ());
    
    where a variable of type Time and named t is defined to have the value 5 s (seconds), the unit must be given as an unnamed object of the unit type, in this case Second. Thus, the second argument to the Time constructor is generated by the unit's default constructor.
  5. The convention for type names of predefined units has slightly changed. Now all units start with a capital letter, as in Second, prefixed units have in addition the first letter of the base unit capitalized, as in MilliSecond.
  6. The name and the symbol of a quantity are no longer set by functions set_name and set_symbol. Rather use member functions name (string) and symbol (string).
  7. The units named `atomic unit of ...' now have the common type name Atomic, each in its separate namespace, e.g. TimeUnits::Atomic.
  8. The pow() function does now generate a result with the type generated automatically from the argument type, and the exponent. This is accomplished by compile time calculation of the result's dimension. In order to do this efficiently, the second argument of the pow function can no longer be a double variable. Rather a Rational<> number must be used (Rational<> numbers are defined in the BSUtilities header file TemplateTools.h, based on W. Brown's paper). A version of the pow() function with a double argument is currently being implemented.
  9. The fabs() function is now obsolete. Use abs() instead, which is overloaded for various types in C++.
  10. Natural constant, such as the Faraday constant are now SingletonConstants. There is need to construct these explicitly. They should only be accessed through the corresponsing macro, e.g. FARADAYCONSTANT.
  11. The syntax for enabling/disabling printing and reading of names and symbols (as well as reading of units) has changed. Use now objects of type PrintName<P> and PrintSymbol<P>, or ReadName<P>, ReadSymbol<P>, and ReadUnit<P> with P being true or false. Thus,
    cout << PrintSymbol<true>
    
    switches on symbol reading and
    cout << PrintSymbol<false>
    
    switches it off.

back to Quantities start page


Generated on Mon Jul 27 15:55:46 2009 for Quantities by  doxygen 1.5.3