ATLAS Offline Software
Loading...
Searching...
No Matches
releasing_iterator.h
Go to the documentation of this file.
1// This file's extension implies that it's C, but it's really -*- C++ -*-.
2/*
3 * Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration.
4 */
11
12
13#ifndef CXXUTILS_RELEASING_ITERATOR_H
14#define CXXUTILS_RELEASING_ITERATOR_H
15
16
17#include <iterator>
18
19
20namespace CxxUtils {
21
22
38template <class ITERATOR>
40{
41public:
42 using value_type = typename std::iterator_traits<ITERATOR>::value_type::pointer;
45 using difference_type = typename std::iterator_traits<ITERATOR>::difference_type;
46 using iterator_category = std::input_iterator_tag;
47
48 releasing_iterator (ITERATOR it) : m_it (it) {}
49 value_type operator*() { return m_it->release(); }
50 releasing_iterator& operator++() { ++m_it; return *this; }
51 bool operator!= (const releasing_iterator& other) const { return m_it != other.m_it; }
52
53
54private:
55 ITERATOR m_it;
56};
57
58
59} // namespace CxxUtils
60
61
62#endif // not CXXUTILS_RELEASING_ITERATOR_H
bool operator!=(const releasing_iterator &other) const
releasing_iterator & operator++()
typename std::iterator_traits< ITERATOR >::difference_type difference_type
std::input_iterator_tag iterator_category
typename std::iterator_traits< ITERATOR >::value_type::pointer value_type