// Copyright 2020 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_TEST_DUMMY_STORAGE_HPP #define BOOST_HISTOGRAM_TEST_DUMMY_STORAGE_HPP #include #include #include #include #include template struct dummy_storage : std::array { using base_t = std::array; static constexpr bool has_threading_support = false; static constexpr bool scaleable = Scaleable && boost::histogram::detail::has_operator_rmul::value; std::size_t size_ = 0; std::size_t size() const { return size_; } void reset(std::size_t n) { assert(n < this->max_size()); size_ = n; } auto end() { return this->begin() + size(); } auto end() const { return this->begin() + size(); } bool operator==(const dummy_storage& o) const { return std::equal(this->begin(), end(), o.begin(), o.end()); } template std::enable_if_t operator*=(double) { // do nothing, so it works with unscalable value types for testing purposes return *this; } }; struct unscaleable { int value = 0; void operator++() { ++value; } bool operator==(const int& o) const { return value == o; } }; inline std::ostream& operator<<(std::ostream& os, const unscaleable& x) { os << x.value; return os; } #endif