Boost logo

Boost :

Subject: Re: [boost] [histogram] should some_axis::size() return unsigned or int?
From: Gavin Lambert (boost_at_[hidden])
Date: 2018-11-29 23:38:01


On 30/11/2018 06:12, Hans Dembinski wrote:
> This is not a good match here, because -1 here does not have the meaning of "value is missing", but it really is the logical index for the virtual bin that spans from -infinity to the lower edge of the first bin in the axis.
>
> Value arrow:
> -inf ——————— | ——————— | —————— | —————— |—————————> +inf
> bin -1 bin 0 bin 1 bin 2 bin 3
>
> I think representing the underflow bin with -1 and the overflow bin with the value returned by size() is very intuitive and elegant.

Conventionally your size_type should be the same type returned by size()
and used for indexing. So I would expect that type to be int, given the
above.

Having said that, you're already departing from standard container
conventions by having size() return a number that is *sometimes* 2
smaller than the "real" number of bins, which might frustrate generic
algorithms.

Completely without tongue in cheek, I wonder if it might be better to
not provide a size() method at all (to avoid container implications
which you do not satisfy) and spell it as bin_count() or something
distinct instead.

Another possibility that might sidestep all of this could be to remove
the underflow/overflow bins from the standard indexing and make them
only accessible through separate underflow_bin() methods (or similar)
instead. But this might complicate other cases such as a
find_bin_for_value() that needs to return an underflow/overflow (though
that could be solved by returning a bin iterator, not an index).

I'm not sure if that's actually *better* though. :)


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk