$include_dir="/home/hyper-archives/ublas/include"; include("$include_dir/msg-header.inc") ?>
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