| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copyright 2018 Hans Dembinski
- //
- // Distributed under the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt
- // or copy at http://www.boost.org/LICENSE_1_0.txt)
- #ifndef BOOST_HISTOGRAM_UNSAFE_ACCESS_HPP
- #define BOOST_HISTOGRAM_UNSAFE_ACCESS_HPP
- #include <boost/histogram/detail/axes.hpp>
- #include <type_traits>
- namespace boost {
- namespace histogram {
- /// Unsafe read/write access to classes that potentially break consistency
- struct unsafe_access {
- /**
- Get axes.
- @param hist histogram.
- */
- template <class Histogram>
- static auto& axes(Histogram& hist) {
- return hist.axes_;
- }
- /// @copydoc axes()
- template <class Histogram>
- static const auto& axes(const Histogram& hist) {
- return hist.axes_;
- }
- /**
- Get mutable axis reference with compile-time number.
- @param hist histogram.
- @tparam I axis index (optional, default: 0).
- */
- template <class Histogram, unsigned I = 0>
- static decltype(auto) axis(Histogram& hist, std::integral_constant<unsigned, I> = {}) {
- detail::axis_index_is_valid(hist.axes_, I);
- return detail::axis_get<I>(hist.axes_);
- }
- /**
- Get mutable axis reference with run-time number.
- @param hist histogram.
- @param i axis index.
- */
- template <class Histogram>
- static decltype(auto) axis(Histogram& hist, unsigned i) {
- detail::axis_index_is_valid(hist.axes_, i);
- return detail::axis_get(hist.axes_, i);
- }
- /**
- Get storage.
- @param hist histogram.
- */
- template <class Histogram>
- static auto& storage(Histogram& hist) {
- return hist.storage_;
- }
- /// @copydoc storage()
- template <class Histogram>
- static const auto& storage(const Histogram& hist) {
- return hist.storage_;
- }
- };
- } // namespace histogram
- } // namespace boost
- #endif
|