// 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 #include namespace boost { namespace histogram { /// Unsafe read/write access to classes that potentially break consistency struct unsafe_access { /** Get axes. @param hist histogram. */ template static auto& axes(Histogram& hist) { return hist.axes_; } /// @copydoc axes() template 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 static decltype(auto) axis(Histogram& hist, std::integral_constant = {}) { detail::axis_index_is_valid(hist.axes_, I); return detail::axis_get(hist.axes_); } /** Get mutable axis reference with run-time number. @param hist histogram. @param i axis index. */ template 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 static auto& storage(Histogram& hist) { return hist.storage_; } /// @copydoc storage() template static const auto& storage(const Histogram& hist) { return hist.storage_; } }; } // namespace histogram } // namespace boost #endif