]> git.proxmox.com Git - ceph.git/blob - ceph/src/seastar/include/seastar/util/function_input_iterator.hh
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / seastar / include / seastar / util / function_input_iterator.hh
1 /*
2 * This file is open source software, licensed to you under the terms
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
4 * distributed with this work for additional information regarding copyright
5 * ownership. You may not use this file except in compliance with the License.
6 *
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing,
12 * software distributed under the License is distributed on an
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 * KIND, either express or implied. See the License for the
15 * specific language governing permissions and limitations
16 * under the License.
17 */
18 /*
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
20 */
21
22 #pragma once
23
24 namespace seastar {
25
26 template <typename Function, typename State>
27 struct function_input_iterator {
28 Function _func;
29 State _state;
30 public:
31 function_input_iterator(Function func, State state)
32 : _func(func), _state(state) {
33 }
34 function_input_iterator(const function_input_iterator&) = default;
35 function_input_iterator(function_input_iterator&&) = default;
36 function_input_iterator& operator=(const function_input_iterator&) = default;
37 function_input_iterator& operator=(function_input_iterator&&) = default;
38 auto operator*() const {
39 return _func();
40 }
41 function_input_iterator& operator++() {
42 ++_state;
43 return *this;
44 }
45 function_input_iterator operator++(int) {
46 function_input_iterator ret{*this};
47 ++_state;
48 return ret;
49 }
50 bool operator==(const function_input_iterator& x) const {
51 return _state == x._state;
52 }
53 bool operator!=(const function_input_iterator& x) const {
54 return !operator==(x);
55 }
56 };
57
58 template <typename Function, typename State>
59 inline
60 function_input_iterator<Function, State>
61 make_function_input_iterator(Function func, State state) {
62 return function_input_iterator<Function, State>(func, state);
63 }
64
65 template <typename Function, typename State>
66 inline
67 function_input_iterator<Function, State>
68 make_function_input_iterator(Function&& func) {
69 return function_input_iterator<Function, State>(func, State{});
70 }
71
72 }