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.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
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
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
26 template <typename Function, typename State>
27 struct function_input_iterator {
31 function_input_iterator(Function func, State state)
32 : _func(func), _state(state) {
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 {
41 function_input_iterator& operator++() {
45 function_input_iterator operator++(int) {
46 function_input_iterator ret{*this};
50 bool operator==(const function_input_iterator& x) const {
51 return _state == x._state;
53 bool operator!=(const function_input_iterator& x) const {
54 return !operator==(x);
58 template <typename Function, typename State>
60 function_input_iterator<Function, State>
61 make_function_input_iterator(Function func, State state) {
62 return function_input_iterator<Function, State>(func, state);
65 template <typename Function, typename State>
67 function_input_iterator<Function, State>
68 make_function_input_iterator(Function&& func) {
69 return function_input_iterator<Function, State>(func, State{});