26 #ifndef CRYPTO3_DETAIL_STRXOR_HPP
27 #define CRYPTO3_DETAIL_STRXOR_HPP
31 #include <boost/concept/assert.hpp>
32 #include <boost/assert.hpp>
33 #include <boost/range/concepts.hpp>
38 template<
typename InputIterator1,
typename InputIterator2,
typename OutputIterator>
39 constexpr
inline typename std::enable_if<
40 std::is_same<typename std::iterator_traits<InputIterator1>::value_type,
41 typename std::iterator_traits<InputIterator2>::value_type>::value &&
42 std::is_same<typename std::iterator_traits<InputIterator1>::value_type,
43 typename std::iterator_traits<OutputIterator>::value_type>::value,
45 strxor(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,
47 BOOST_CONCEPT_ASSERT((boost::InputIteratorConcept<InputIterator1>));
48 BOOST_CONCEPT_ASSERT((boost::InputIteratorConcept<InputIterator2>));
50 (boost::OutputIteratorConcept<OutputIterator,
51 typename std::iterator_traits<OutputIterator>::value_type>));
53 assert(std::distance(first1, last1) == std::distance(first2, last2));
55 for (; first1 != last1 && first2 != last2; first1++, first2++, out++) {
56 *out = *first1 ^ *first2;
62 template<
typename InputRange1,
typename InputRange2,
typename OutputIterator>
63 constexpr
inline OutputIterator
strxor(
const InputRange1 &in1,
const InputRange2 &in2, OutputIterator out) {
64 BOOST_CONCEPT_ASSERT((boost::SinglePassRangeConcept<InputRange1>));
65 BOOST_CONCEPT_ASSERT((boost::SinglePassRangeConcept<InputRange2>));
67 return strxor(in1.cbegin(), in1.cend(), in2.cbegin(), in2.cend(), out);
constexpr std::enable_if< std::is_same< typename std::iterator_traits< InputIterator1 >::value_type, typename std::iterator_traits< InputIterator2 >::value_type >::value &&std::is_same< typename std::iterator_traits< InputIterator1 >::value_type, typename std::iterator_traits< OutputIterator >::value_type >::value, OutputIterator >::type strxor(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator out)
Definition: hash/include/nil/crypto3/detail/strxor.hpp:45