...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::histogram::axis::variable — Axis for non-equidistant bins on the real line.
// In header: <boost/histogram/axis/variable.hpp> template<typename Value, typename MetaData, typename Options, typename Allocator> class variable : public boost::histogram::axis::iterator_mixin< variable< Value, MetaData, Options, Allocator > > { public: // construct/copy/destruct explicit variable(allocator_type = {}); template<typename It, typename = detail::requires_iterator<It> > variable(It, It, metadata_type = {}, allocator_type = {}); template<typename U, typename = detail::requires_iterable<U> > variable(const U &, metadata_type = {}, allocator_type = {}); template<typename U> variable(std::initializer_list< U >, metadata_type = {}, allocator_type = {}); variable(const variable &, index_type, index_type, unsigned); // public member functions index_type index(value_type) const noexcept; auto update(value_type) noexcept; value_type value(real_index_type) const noexcept; auto bin(index_type) const noexcept; index_type size() const noexcept; metadata_type & metadata() noexcept; const metadata_type & metadata() const noexcept; template<typename V, typename M, typename O, typename A> bool operator==(const variable< V, M, O, A > &) const noexcept; template<typename V, typename M, typename O, typename A> bool operator!=(const variable< V, M, O, A > &) const noexcept; auto get_allocator() const; template<typename Archive> void serialize(Archive &, unsigned); // public static functions static constexpr unsigned options() noexcept; };
Binning is a O(log(N)) operation. If speed matters and the problem domain allows it, prefer a regular axis, possibly with a transform.
typename Value
input value type, must be floating point.
typename MetaData
type to store meta data.
typename Options
see boost::histogram::axis::option (all values allowed).
typename Allocator
allocator to use for dynamic memory management.
variable
public
construct/copy/destructexplicit variable(allocator_type alloc = {});
template<typename It, typename = detail::requires_iterator<It> > variable(It begin, It end, metadata_type meta = {}, allocator_type alloc = {});Construct from iterator range of bin edges.
Parameters: |
|
template<typename U, typename = detail::requires_iterable<U> > variable(const U & iterable, metadata_type meta = {}, allocator_type alloc = {});Construct variable axis from iterable range of bin edges.
Parameters: |
|
template<typename U> variable(std::initializer_list< U > list, metadata_type meta = {}, allocator_type alloc = {});Construct variable axis from initializer list of bin edges.
Parameters: |
|
variable(const variable & src, index_type begin, index_type end, unsigned merge);Constructor used by algorithm::reduce to shrink and rebin (not for users).
variable
public member functionsindex_type index(value_type x) const noexcept;Return index for value argument.
auto update(value_type x) noexcept;
value_type value(real_index_type i) const noexcept;Return value for fractional index argument.
auto bin(index_type idx) const noexcept;Return bin for index argument.
index_type size() const noexcept;Returns the number of bins, without over- or underflow.
metadata_type & metadata() noexcept;Returns reference to metadata.
const metadata_type & metadata() const noexcept;Returns reference to const metadata.
template<typename V, typename M, typename O, typename A> bool operator==(const variable< V, M, O, A > & o) const noexcept;
template<typename V, typename M, typename O, typename A> bool operator!=(const variable< V, M, O, A > & o) const noexcept;
auto get_allocator() const;Return allocator instance.
template<typename Archive> void serialize(Archive &, unsigned);