• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

STEllAR-GROUP / hpx / #882

31 Aug 2023 07:44PM UTC coverage: 41.798% (-44.7%) from 86.546%
#882

push

19442 of 46514 relevant lines covered (41.8%)

126375.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

58.33
/libs/core/iterator_support/include/hpx/iterator_support/iterator_range.hpp
1
//  Copyright (c) 2017 Agustin Berge
2
//  Copyright (c) 2022-2025 Hartmut Kaiser
3
//
4
//  SPDX-License-Identifier: BSL-1.0
5
//  Distributed under the Boost Software License, Version 1.0. (See accompanying
6
//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7

8
#pragma once
9

10
#include <hpx/config.hpp>
11
#include <hpx/iterator_support/range.hpp>
12
#include <hpx/iterator_support/traits/is_iterator.hpp>
13
#include <hpx/iterator_support/traits/is_range.hpp>
14

15
#include <cstddef>
16
#include <iterator>
17
#include <type_traits>
18
#include <utility>
19

20
namespace hpx::util {
21

22
    HPX_CXX_EXPORT template <typename Iterator, typename Sentinel = Iterator>
23
    class iterator_range
24
    {
25
        static_assert(hpx::traits::is_iterator_v<Iterator>);
26
        static_assert(hpx::traits::is_sentinel_for_v<Sentinel, Iterator>);
27

28
    public:
29
        HPX_HOST_DEVICE iterator_range() = default;
30

31
        HPX_HOST_DEVICE constexpr iterator_range(
6✔
32
            Iterator iterator, Sentinel sentinel) noexcept
33
          : _iterator(HPX_MOVE(iterator))
5✔
34
          , _sentinel(HPX_MOVE(sentinel))
5✔
35
        {
36
        }
1✔
37

38
        // clang-format off
39
        template <typename Range,
40
            typename Enable =
41
                std::enable_if_t<
42
                    hpx::traits::is_range_v<std::decay_t<Range>> &&
43
                   !std::is_same_v<iterator_range, std::decay_t<Range>>>>
44
        // clang-format on
45
        HPX_HOST_DEVICE explicit constexpr iterator_range(Range&& r) noexcept
×
46
          : iterator_range(util::begin(r), util::end(r))
47
        {
48
        }
×
49

50
        [[nodiscard]] HPX_HOST_DEVICE constexpr Iterator begin() const
×
51
        {
52
            return _iterator;
5✔
53
        }
54

55
        [[nodiscard]] HPX_HOST_DEVICE constexpr Iterator end() const
×
56
        {
57
            return _sentinel;
×
58
        }
59

60
        [[nodiscard]] HPX_HOST_DEVICE constexpr std::ptrdiff_t size() const
2✔
61
        {
62
            return std::distance(_iterator, _sentinel);
12✔
63
        }
64

65
        [[nodiscard]] HPX_HOST_DEVICE constexpr bool empty() const
66
        {
67
            return _iterator == _sentinel;
68
        }
69

70
    private:
71
        Iterator _iterator;
72
        Sentinel _sentinel;
73
    };
74

75
    HPX_CXX_EXPORT template <typename Range>
76
    iterator_range(Range& r)
77
        -> iterator_range<hpx::traits::range_iterator_t<Range>>;
78

79
    HPX_CXX_EXPORT template <typename Range>
80
    iterator_range(Range const& r)
81
        -> iterator_range<hpx::traits::range_iterator_t<Range const>>;
82

83
    HPX_CXX_EXPORT template <typename Iterator, typename Sentinel>
84
    iterator_range(Iterator it, Sentinel sent)
85
        -> iterator_range<Iterator, Sentinel>;
86

87
    template <typename Range,
88
        typename Iterator = traits::range_iterator_t<Range>,
89
        typename Sentinel = traits::range_iterator_t<Range>>
90
    HPX_DEPRECATED_V(1, 9,
91
        "hpx::util::make_iterator_range is deprecated, use "
92
        "hpx::util::iterator_range instead")
93
    HPX_HOST_DEVICE constexpr std::enable_if_t<traits::is_range_v<Range>,
94
        iterator_range<Iterator, Sentinel>> make_iterator_range(Range&
95
            r) noexcept
96
    {
97
        return iterator_range<Iterator, Sentinel>(util::begin(r), util::end(r));
98
    }
99

100
    template <typename Range,
101
        typename Iterator = traits::range_iterator_t<Range const>,
102
        typename Sentinel = traits::range_iterator_t<Range const>>
103
    HPX_DEPRECATED_V(1, 9,
104
        "hpx::util::make_iterator_range is deprecated, use "
105
        "hpx::util::iterator_range instead")
106
    HPX_HOST_DEVICE constexpr std::enable_if_t<traits::is_range_v<Range>,
107
        iterator_range<Iterator, Sentinel>> make_iterator_range(Range const&
108
            r) noexcept
109
    {
110
        return iterator_range<Iterator, Sentinel>(util::begin(r), util::end(r));
111
    }
112

113
    template <typename Iterator, typename Sentinel = Iterator>
114
    HPX_DEPRECATED_V(1, 9,
115
        "hpx::util::make_iterator_range is deprecated, use "
116
        "hpx::util::iterator_range instead")
117
    HPX_HOST_DEVICE constexpr std::enable_if_t<traits::is_iterator_v<Iterator>,
118
        iterator_range<Iterator, Sentinel>> make_iterator_range(Iterator it,
119
        Sentinel sent) noexcept
120
    {
121
        return iterator_range<Iterator, Sentinel>(HPX_MOVE(it), HPX_MOVE(sent));
122
    }
123
}    // namespace hpx::util
124

125
namespace hpx::ranges {
126

127
    HPX_CXX_EXPORT template <typename I, typename S = I>
128
    using subrange_t = hpx::util::iterator_range<I, S>;
129
}
130
// namespace hpx::ranges
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc