Seastar
High performance C++ framework for concurrent servers
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>
28  Function _func;
29  State _state;
30 public:
31  function_input_iterator(Function func, State state)
32  : _func(func), _state(state) {
33  }
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
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 }
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
Definition: function_input_iterator.hh:27