Boost logo

Ublas :

Subject: Re: [ublas] bounds-checking and rounding policies for ublas.vector?
From: Geoff Hilton (geoff.hilton_at_[hidden])
Date: 2009-05-27 15:55:33


Maybe a clarification will help coax someone to reply...
Essentially, what I'm looking for is a way to replace scalar_plus and
scalar_minus implementations with my own.

Geoff Hilton wrote:
> Hi, I would like to have the ublas:vector operator+, operator+=,
> operator- and operator-= use a custom bounds-checking/rounding policy
> class (like one that can be supplied to boost.numeric.interval types
> explicitly for example). How would I go about making this happen in the
> least convoluted way possible?
>
> ....in pseudo-code:
>
> namespace ublas = boost::numeric::ublas;
> //...
> ublas::vector<int
> ,std::vector<int>
> ,plus<int>
> ,minus<int> //not listed here
> > vecOne, vecTwo, vecThree;
> //fill both with values.
> ....
> vecThree = vecOne + vecTwo;
>
> would call the function written below (ignoring the vector_expression
> abstraction) once for each element involved in the vector addition
> rather than the default built-in "int ::operator+(int , int)" function:
>
> template<>
> int plus<int>::operator ()(const int lhs, const int rhs) const
> {
> if (boost::integer_traits<int>::const_max - lhs < rhs) {
> //rather than cause an error, just return max.
> return boost::integer_traits<int>::const_max;
> }
> return lhs + rhs;
> }
>
> Of course the class template interface of vector shown above could be
> cleaner with one policy which points to the above plus<int> and a
> matching minus<int>, but I didn't want to go into more detail than was
> necessary to get my point across.
>
> Thanks,
> Geoff