/
usr
/
include
/
boost
/
histogram
/
detail
/
/usr/include/boost/histogram/detail
mkdir
upload
Name
Size
Mode
Actions
accumulator_traits.hpp
2812
0644
edit
dl
rm
args_type.hpp
1546
0644
edit
dl
rm
argument_traits.hpp
2548
0644
edit
dl
rm
array_wrapper.hpp
2050
0644
edit
dl
rm
axes.hpp
13362
0644
edit
dl
rm
common_type.hpp
1335
0644
edit
dl
rm
convert_integer.hpp
566
0644
edit
dl
rm
counting_streambuf.hpp
1923
0644
edit
dl
rm
detect.hpp
8320
0644
edit
dl
rm
fill.hpp
12609
0644
edit
dl
rm
fill_n.hpp
13696
0644
edit
dl
rm
index_translator.hpp
3437
0644
edit
dl
rm
iterator_adaptor.hpp
4484
0644
edit
dl
rm
large_int.hpp
6543
0644
edit
dl
rm
limits.hpp
986
0644
edit
dl
rm
linearize.hpp
4482
0644
edit
dl
rm
make_default.hpp
710
0644
edit
dl
rm
mutex_base.hpp
1228
0644
edit
dl
rm
nonmember_container_access.hpp
1448
0644
edit
dl
rm
operators.hpp
4494
0644
edit
dl
rm
optional_index.hpp
1426
0644
edit
dl
rm
priority.hpp
593
0644
edit
dl
rm
reduce_command.hpp
2541
0644
edit
dl
rm
relaxed_equal.hpp
1217
0644
edit
dl
rm
relaxed_tuple_size.hpp
956
0644
edit
dl
rm
replace_type.hpp
818
0644
edit
dl
rm
safe_comparison.hpp
2519
0644
edit
dl
rm
span.hpp
9048
0644
edit
dl
rm
static_if.hpp
1477
0644
edit
dl
rm
sub_array.hpp
3577
0644
edit
dl
rm
try_cast.hpp
1575
0644
edit
dl
rm
tuple_slice.hpp
1019
0644
edit
dl
rm
type_name.hpp
1083
0644
edit
dl
rm
variant_proxy.hpp
2430
0644
edit
dl
rm
Edit:
/usr/include/boost/histogram/detail/iterator_adaptor.hpp
(4484B)
// Copyright 2019 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) // // Uses code segments from boost/iterator/iterator_adaptor.hpp // and boost/iterator/iterator_fascade.hpp #ifndef BOOST_HISTOGRAM_DETAIL_ITERATOR_ADAPTOR_HPP #define BOOST_HISTOGRAM_DETAIL_ITERATOR_ADAPTOR_HPP #include <iterator> #include <memory> #include <type_traits> #include <utility> namespace boost { namespace histogram { namespace detail { // operator->() needs special support for input iterators to strictly meet the // standard's requirements. If *i is not a reference type, we must still // produce an lvalue to which a pointer can be formed. We do that by // returning a proxy object containing an instance of the reference object. template <class Reference> struct operator_arrow_dispatch_t // proxy references { struct proxy { explicit proxy(Reference const& x) noexcept : m_ref(x) {} Reference* operator->() noexcept { return std::addressof(m_ref); } Reference m_ref; }; using result_type = proxy; static result_type apply(Reference const& x) noexcept { return proxy(x); } }; template <class T> struct operator_arrow_dispatch_t<T&> // "real" references { using result_type = T*; static result_type apply(T& x) noexcept { return std::addressof(x); } }; // only for random access Base template <class Derived, class Base, class Reference = std::remove_pointer_t<Base>&, class Value = std::decay_t<Reference>> class iterator_adaptor { using operator_arrow_dispatch = operator_arrow_dispatch_t<Reference>; public: using base_type = Base; using reference = Reference; using value_type = std::remove_const_t<Value>; using pointer = typename operator_arrow_dispatch::result_type; using difference_type = std::ptrdiff_t; using iterator_category = std::random_access_iterator_tag; iterator_adaptor() = default; explicit iterator_adaptor(base_type const& iter) : iter_(iter) {} pointer operator->() const noexcept { return operator_arrow_dispatch::apply(this->derived().operator*()); } reference operator[](difference_type n) const { return *(this->derived() + n); } Derived& operator++() { ++iter_; return this->derived(); } Derived& operator--() { --iter_; return this->derived(); } Derived operator++(int) { Derived tmp(this->derived()); ++iter_; return tmp; } Derived operator--(int) { Derived tmp(this->derived()); --iter_; return tmp; } Derived& operator+=(difference_type n) { iter_ += n; return this->derived(); } Derived& operator-=(difference_type n) { iter_ -= n; return this->derived(); } Derived operator+(difference_type n) const { Derived tmp(this->derived()); tmp += n; return tmp; } Derived operator-(difference_type n) const { return operator+(-n); } template <class... Ts> difference_type operator-(const iterator_adaptor<Ts...>& x) const noexcept { return iter_ - x.iter_; } template <class... Ts> bool operator==(const iterator_adaptor<Ts...>& x) const noexcept { return iter_ == x.iter_; } template <class... Ts> bool operator!=(const iterator_adaptor<Ts...>& x) const noexcept { return !this->derived().operator==(x); // equal operator may be overridden in derived } template <class... Ts> bool operator<(const iterator_adaptor<Ts...>& x) const noexcept { return iter_ < x.iter_; } template <class... Ts> bool operator>(const iterator_adaptor<Ts...>& x) const noexcept { return iter_ > x.iter_; } template <class... Ts> bool operator<=(const iterator_adaptor<Ts...>& x) const noexcept { return iter_ <= x.iter_; } template <class... Ts> bool operator>=(const iterator_adaptor<Ts...>& x) const noexcept { return iter_ >= x.iter_; } friend Derived operator+(difference_type n, const Derived& x) { return x + n; } Base const& base() const noexcept { return iter_; } protected: // for convenience in derived classes using iterator_adaptor_ = iterator_adaptor; private: Derived& derived() noexcept { return *static_cast<Derived*>(this); } const Derived& derived() const noexcept { return *static_cast<Derived const*>(this); } Base iter_; template <class, class, class, class> friend class iterator_adaptor; }; } // namespace detail } // namespace histogram } // namespace boost #endif
Save
cmd:
run