trout
Phlex-based reconstruction framework for the SHiP experiment.
Loading...
Searching...
No Matches
Range.hpp
Go to the documentation of this file.
1// This file is part of the ACTS project.
2//
3// Copyright (C) 2016 CERN for the benefit of the ACTS project
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9#pragma once
10
11#include <iterator>
12#include <utility>
13
14namespace ActsExamples {
15
26template <typename Iterator>
27class Range {
28 public:
29 Range(const Iterator& b, const Iterator& e) : m_begin(b), m_end(e) {}
30 Range(Range&&) noexcept = default;
31 Range(const Range&) = default;
32 ~Range() = default;
33 Range& operator=(Range&&) noexcept = default;
34 Range& operator=(const Range&) = default;
35 Iterator begin() const { return m_begin; }
36 Iterator end() const { return m_end; }
37 bool empty() const { return m_begin == m_end; }
38 std::size_t size() const { return std::distance(m_begin, m_end); }
39
40 private:
41 Iterator m_begin;
42 Iterator m_end;
43};
44
45template <typename Iterator>
46Range<Iterator> makeRange(const Iterator& begin, const Iterator& end) {
47 return Range<Iterator>(begin, end);
48}
49
50template <typename Iterator>
51Range<Iterator> makeRange(const std::pair<Iterator, Iterator>& range) {
52 return Range<Iterator>(range.first, range.second);
53}
54
55} // namespace ActsExamples
A wrapper around a pair of iterators to simplify range-based loops.
Definition Range.hpp:27
std::size_t size() const
Definition Range.hpp:38
Range(const Iterator &b, const Iterator &e)
Definition Range.hpp:29
bool empty() const
Definition Range.hpp:37
Iterator end() const
Definition Range.hpp:36
Range(Range &&) noexcept=default
Iterator begin() const
Definition Range.hpp:35
Definition GeometryContainers.hpp:22
Range< Iterator > makeRange(const Iterator &begin, const Iterator &end)
Definition Range.hpp:46