[prev in list] [next in list] [prev in thread] [next in thread]
List: boost
Subject: Re: [boost] [histogram] discussion of accessor interface design
From: Hans Dembinski via Boost <boost () lists ! boost ! org>
Date: 2019-01-28 13:07:27
Message-ID: D1BE7167-B3BC-464B-BD07-E5867C385E1C () gmail ! com
[Download RAW message or body]
Hi Bjorn,
> On 28. Jan 2019, at 12:43, Bjorn Reese via Boost <boost@lists.boost.org> wrote:
>
> On 1/15/19 12:35 PM, Hans Dembinski via Boost wrote:
>
> > Pros:
> > - really terse
> > - you can access methods on the pointee with x->method() as well! (useful when \
> > histogram counters are not PODs)
> > - you can iterate over x to get the indices, for (auto i : x) { … } works
>
> Doesn't range-for use operator* so you will get the values?
indexed(…) has iterators which return "accessors" when they are dereferenced, which \
behave like pointers to the cell value. So you have to dereference twice to go from \
the original iterator to the value, instead of once.
Here is an example snippet:
for (auto x : indexed(h, coverage::all)) {
std::cout << boost::format("%2i %2i: %i\n") % x.index(0) % x.index(1) % *x;
}
x is the accessor, *x gives the value. The pointer semantics are nice, because they \
allow easy access to methods of the value, which may be an accumulator instead of a \
simple integer or floating point type. You can access methods on the value like this \
x->value(), x->variance().
> > - since x acts like an array to the indices, you can pass it to functions which \
> > accept ranges or iterators (it has .begin() and .end())
> > - x can be (and is) enhanced with other useful methods
> > * x.bin(N) returns the current bin interval for the N-th axis, allowing you to \
> > access the central value, width, edges
> > * x.density() returns the current density (bin value divided by product of \
> > current bin widths) Cons:
> > - *x and x[0] do completely different things: *x gives you the bin value, x[0] \
> > gives you the first index
>
> An alternative is to rename x[i] to x.index(i).
Yes, I changed that in the meantime, after my friends from the Scikit-HEP project \
http://scikit-hep.org convinced me that I am overusing operators here.
Best regards,
Hans
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic