mirror of
https://github.com/boostorg/algorithm.git
synced 2025-07-06 09:16:33 +02:00
Implement algorithm::hex_lower as lower-case alternative to algorithm::hex
This commit is contained in:
committed by
Nigel Stewart
parent
205f5ff4bb
commit
d558476f41
@ -54,12 +54,12 @@ namespace detail {
|
|||||||
/// \cond DOXYGEN_HIDE
|
/// \cond DOXYGEN_HIDE
|
||||||
|
|
||||||
template <typename T, typename OutputIterator>
|
template <typename T, typename OutputIterator>
|
||||||
OutputIterator encode_one ( T val, OutputIterator out ) {
|
OutputIterator encode_one ( T val, OutputIterator out, const char * hexDigits ) {
|
||||||
const std::size_t num_hex_digits = 2 * sizeof ( T );
|
const std::size_t num_hex_digits = 2 * sizeof ( T );
|
||||||
char res [ num_hex_digits ];
|
char res [ num_hex_digits ];
|
||||||
char *p = res + num_hex_digits;
|
char *p = res + num_hex_digits;
|
||||||
for ( std::size_t i = 0; i < num_hex_digits; ++i, val >>= 4 )
|
for ( std::size_t i = 0; i < num_hex_digits; ++i, val >>= 4 )
|
||||||
*--p = "0123456789ABCDEF" [ val & 0x0F ];
|
*--p = hexDigits [ val & 0x0F ];
|
||||||
return std::copy ( res, res + num_hex_digits, out );
|
return std::copy ( res, res + num_hex_digits, out );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +148,24 @@ template <typename InputIterator, typename OutputIterator>
|
|||||||
typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<InputIterator>::value_type>, OutputIterator>::type
|
typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<InputIterator>::value_type>, OutputIterator>::type
|
||||||
hex ( InputIterator first, InputIterator last, OutputIterator out ) {
|
hex ( InputIterator first, InputIterator last, OutputIterator out ) {
|
||||||
for ( ; first != last; ++first )
|
for ( ; first != last; ++first )
|
||||||
out = detail::encode_one ( *first, out );
|
out = detail::encode_one ( *first, out, "0123456789ABCDEF" );
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn hex_lower ( InputIterator first, InputIterator last, OutputIterator out )
|
||||||
|
/// \brief Converts a sequence of integral types into a lower case hexadecimal sequence of characters.
|
||||||
|
///
|
||||||
|
/// \param first The start of the input sequence
|
||||||
|
/// \param last One past the end of the input sequence
|
||||||
|
/// \param out An output iterator to the results into
|
||||||
|
/// \return The updated output iterator
|
||||||
|
/// \note Based on the MySQL function of the same name
|
||||||
|
template <typename InputIterator, typename OutputIterator>
|
||||||
|
typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<InputIterator>::value_type>, OutputIterator>::type
|
||||||
|
hex_lower ( InputIterator first, InputIterator last, OutputIterator out ) {
|
||||||
|
for ( ; first != last; ++first )
|
||||||
|
out = detail::encode_one ( *first, out, "0123456789abcdef" );
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,10 +181,27 @@ template <typename T, typename OutputIterator>
|
|||||||
typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
|
typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
|
||||||
hex ( const T *ptr, OutputIterator out ) {
|
hex ( const T *ptr, OutputIterator out ) {
|
||||||
while ( *ptr )
|
while ( *ptr )
|
||||||
out = detail::encode_one ( *ptr++, out );
|
out = detail::encode_one ( *ptr++, out, "0123456789ABCDEF" );
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn hex_lower ( const T *ptr, OutputIterator out )
|
||||||
|
/// \brief Converts a sequence of integral types into a lower case hexadecimal sequence of characters.
|
||||||
|
///
|
||||||
|
/// \param ptr A pointer to a 0-terminated sequence of data.
|
||||||
|
/// \param out An output iterator to the results into
|
||||||
|
/// \return The updated output iterator
|
||||||
|
/// \note Based on the MySQL function of the same name
|
||||||
|
template <typename T, typename OutputIterator>
|
||||||
|
typename boost::enable_if<boost::is_integral<T>, OutputIterator>::type
|
||||||
|
hex_lower ( const T *ptr, OutputIterator out ) {
|
||||||
|
while ( *ptr )
|
||||||
|
out = detail::encode_one ( *ptr++, out, "0123456789abcdef" );
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// \fn hex ( const Range &r, OutputIterator out )
|
/// \fn hex ( const Range &r, OutputIterator out )
|
||||||
/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters.
|
/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters.
|
||||||
///
|
///
|
||||||
@ -182,6 +216,20 @@ hex ( const Range &r, OutputIterator out ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \fn hex_lower ( const Range &r, OutputIterator out )
|
||||||
|
/// \brief Converts a sequence of integral types into a lower case hexadecimal sequence of characters.
|
||||||
|
///
|
||||||
|
/// \param r The input range
|
||||||
|
/// \param out An output iterator to the results into
|
||||||
|
/// \return The updated output iterator
|
||||||
|
/// \note Based on the MySQL function of the same name
|
||||||
|
template <typename Range, typename OutputIterator>
|
||||||
|
typename boost::enable_if<boost::is_integral<typename detail::hex_iterator_traits<typename Range::iterator>::value_type>, OutputIterator>::type
|
||||||
|
hex_lower ( const Range &r, OutputIterator out ) {
|
||||||
|
return hex_lower (boost::begin(r), boost::end(r), out);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// \fn unhex ( InputIterator first, InputIterator last, OutputIterator out )
|
/// \fn unhex ( InputIterator first, InputIterator last, OutputIterator out )
|
||||||
/// \brief Converts a sequence of hexadecimal characters into a sequence of integers.
|
/// \brief Converts a sequence of hexadecimal characters into a sequence of integers.
|
||||||
///
|
///
|
||||||
|
Reference in New Issue
Block a user