Boost logo

Boost :

From: Matthias Schabel (boost_at_[hidden])
Date: 2007-02-15 15:54:46

> I apologize. The comparisons in dimension.hpp are
> currently hard coded to use operator<. You'll need
> to fix sort and merge.

No need to apologize - I appreciate the effort you put into
This will be a bit more complicated, unfortunately. The code for the
was relatively straightforward to add:

template<int N1, int N2>
struct merge_dimensions_impl {
     template<typename Begin1, typename Begin2>
     struct apply
                typedef typename boost::mpl::deref<Begin1>::type dim1;
                typedef typename boost::mpl::deref<Begin2>::type dim2;
         typedef typename merge_dimensions_func<
(less<dim1,dim2>::value == true),
                                                                                           (boost::is_same<dim1,dim2>::value == true)>::template
>::type type;

but in the partition you only pass the tag value, so I can't just
drop less<> in...
I'll need to pass the whole dim<>, then insert using less<>...

template<int N>
struct partition_dims_forward_impl
     template<typename Begin, typename State, long Value>
     struct apply
         typedef typename Begin::item::tag_type::value val;
         typedef typename partition_dims_forward_impl<N -
1>::template apply<
             typename Begin::next,
             typename partition_dims_state_insert<((val::value) <
                         apply<State, typename Begin::item>::type,
>::type type;

In addition, modifying the merge appears to cause problems with
dimensionless units...sigh.

On a positive note, I think multiplication/division of units should
just work once
the sort works correctly. Unit conversion will be a little more
complicated; I think
it will work with two constraints:

1) The target unit may only have one instance of each tag (no
repeated tags with different
systems). Otherwise, the conversion becomes ambiguous.

2) The source unit must have exactly the same set of tags as the
target unit.

To do conversion, we'll have to pull out a list of all list elements
having a given tag, then
convert the ones not in the same system as the same tag in the target
unit, then merge.

Anyway, this is probably not interesting to anyone...don't mind my


Boost list run by bdawes at, gregod at, cpdaniel at, john at