$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: edA-qa mort-ora-y (eda-qa_at_[hidden])
Date: 2004-07-04 12:42:52
Is there any interest in a library that performs strict type checking on 
values with unit quantities?  The intent is to prevent operation and 
assigment of unlike types.
For example, if A is in meters/second, and B is in seconds:
        -A * B results in a value with "meters" units
        -A / B results in a value with "meters/seconds^2"
        -A = B results in an exception due to a mismatch
The code I have so far supports arbitrary unit types via tokens, which 
have to be defined for a project.  Some example code looks like (with 
several notation options):
        typedef UnitValue<float> uFloat;
        UnitType unit_m( 1 );	//define meters type
        UnitType unit_s( 2 );	//define seconds type
        
        uFloat time( unit_s );
        time = unit_s( 3.0f );	//3 seconds
        uFloat speed( unit_m / unit_s );
        speed = 15 * speed.Type(); //set speed of 15m/s
        uFloat accel( unit_m / unit_s / unit_s );
        accel = speed / time;	//results in 5m/s^2
        accel = speed;	//throws exception, m/s != m/s^2
        time = accel;	//throws exception, s != m/s^2
The library has a price for performance compared to native value 
operations.  However, part of the requirements will be a flag (a #define 
) that turns off the unit processing for the code, which effectively 
removes the classes (replaces the UnitValue simply with typedefs of the 
stored type).
-- edA-qa mort-ora-y Idea Architect http://disemia.com/