| 35 | /// Space complexity: \Omega(1) |
| 36 | template<class InputIterator1, class InputIterator2> |
| 37 | inline std::pair<InputIterator1, InputIterator2> |
| 38 | mismatch(InputIterator1 first1, |
| 39 | InputIterator1 last1, |
| 40 | InputIterator2 first2, |
| 41 | command_queue &queue = system::default_queue()) |
| 42 | { |
| 43 | BOOST_STATIC_ASSERT(is_device_iterator<InputIterator1>::value); |
| 44 | BOOST_STATIC_ASSERT(is_device_iterator<InputIterator2>::value); |
| 45 | typedef typename std::iterator_traits<InputIterator1>::value_type value_type; |
| 46 | |
| 47 | ::boost::compute::equal_to<value_type> op; |
| 48 | |
| 49 | InputIterator2 last2 = first2 + std::distance(first1, last1); |
| 50 | |
| 51 | InputIterator1 iter = |
| 52 | boost::get<0>( |
| 53 | ::boost::compute::find( |
| 54 | ::boost::compute::make_transform_iterator( |
| 55 | ::boost::compute::make_zip_iterator( |
| 56 | boost::make_tuple(first1, first2) |
| 57 | ), |
| 58 | detail::unpack(op) |
| 59 | ), |
| 60 | ::boost::compute::make_transform_iterator( |
| 61 | ::boost::compute::make_zip_iterator( |
| 62 | boost::make_tuple(last1, last2) |
| 63 | ), |
| 64 | detail::unpack(op) |
| 65 | ), |
| 66 | false, |
| 67 | queue |
| 68 | ).base().get_iterator_tuple() |
| 69 | ); |
| 70 | |
| 71 | return std::make_pair(iter, first2 + std::distance(first1, iter)); |
| 72 | } |
| 73 | |
| 74 | /// \overload |
| 75 | template<class InputIterator1, class InputIterator2> |