Thrust
transform_input_output_iterator.h
Go to the documentation of this file.
1 /*
2  * Copyright 2020 NVIDIA Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
22 #pragma once
23 
24 #include <thrust/detail/config.h>
25 #include <thrust/iterator/detail/transform_input_output_iterator.inl>
26 
27 THRUST_NAMESPACE_BEGIN
28 
87 template <typename InputFunction, typename OutputFunction, typename Iterator>
89  : public detail::transform_input_output_iterator_base<InputFunction, OutputFunction, Iterator>::type
90 {
91 
95  public:
96 
97  typedef typename
98  detail::transform_input_output_iterator_base<InputFunction, OutputFunction, Iterator>::type
99  super_t;
100 
101  friend class thrust::iterator_core_access;
113  __host__ __device__
114  transform_input_output_iterator(Iterator const& io, InputFunction input_function, OutputFunction output_function)
115  : super_t(io), input_function(input_function), output_function(output_function)
116  {
117  }
118 
121  private:
122 
123  __host__ __device__
124  typename super_t::reference dereference() const
125  {
126  return detail::transform_input_output_iterator_proxy<
127  InputFunction, OutputFunction, Iterator
128  >(this->base_reference(), input_function, output_function);
129  }
130 
131  InputFunction input_function;
132  OutputFunction output_function;
133 
136 }; // end transform_input_output_iterator
137 
147 template <typename InputFunction, typename OutputFunction, typename Iterator>
149 __host__ __device__
150 make_transform_input_output_iterator(Iterator io, InputFunction input_function, OutputFunction output_function)
151 {
152  return transform_input_output_iterator<InputFunction, OutputFunction, Iterator>(io, input_function, output_function);
153 } // end make_transform_input_output_iterator
154 
161 THRUST_NAMESPACE_END
162 
thrust::reference< T, thrust::system::cpp::tag > reference
Definition: pointer.h:98
Definition: iterator_facade.h:60
Definition: transform_input_output_iterator.h:88
transform_input_output_iterator< InputFunction, OutputFunction, Iterator > __host__ __device__ make_transform_input_output_iterator(Iterator io, InputFunction input_function, OutputFunction output_function)
Definition: transform_input_output_iterator.h:150