Iterator ranges: astyle-safe trait members; reserve in the test helper
The byte check and the container match are static constexpr members instead of integral_constant arguments and a default template argument with comparisons, which astyle spaced out. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
3 files changed
+31
-12
No files matched your search
@@ -1186,17 +1186,26 @@ other iterator can be mistaken for one. (std::basic_string is only matched for
|
|||||||
char: other character types need std::char_traits specializations that the
|
char: other character types need std::char_traits specializations that the
|
||||||
standard library need not have.)
|
standard library need not have.)
|
||||||
*/
|
*/
|
||||||
template < typename IteratorType, typename CharType, bool IsByte = sizeof(CharType) == 1 && std::is_integral<CharType>::value && !std::is_same<CharType, bool>::value >
|
template<typename CharType>
|
||||||
|
struct is_byte_char_type
|
||||||
|
{
|
||||||
|
// a member, not an integral_constant argument, which astyle misformats
|
||||||
|
static constexpr bool value = sizeof(CharType) == 1 && std::is_integral<CharType>::value && !std::is_same<CharType, bool>::value;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename IteratorType, typename CharType, bool IsByte = is_byte_char_type<CharType>::value>
|
||||||
struct is_std_contiguous_byte_iterator_impl : std::false_type {};
|
struct is_std_contiguous_byte_iterator_impl : std::false_type {};
|
||||||
|
|
||||||
// (the containers are only named for byte types)
|
// (the containers are only named for byte types)
|
||||||
template<typename IteratorType, typename CharType>
|
template<typename IteratorType, typename CharType>
|
||||||
struct is_std_contiguous_byte_iterator_impl<IteratorType, CharType, true>
|
struct is_std_contiguous_byte_iterator_impl<IteratorType, CharType, true>
|
||||||
: std::integral_constant < bool, !std::is_pointer<IteratorType>::value
|
{
|
||||||
&& (std::is_same<IteratorType, typename std::vector<CharType>::iterator>::value
|
static constexpr bool value = !std::is_pointer<IteratorType>::value
|
||||||
|| std::is_same<IteratorType, typename std::vector<CharType>::const_iterator>::value
|
&& (std::is_same<IteratorType, typename std::vector<CharType>::iterator>::value
|
||||||
|| std::is_same<IteratorType, std::string::iterator>::value
|
|| std::is_same<IteratorType, typename std::vector<CharType>::const_iterator>::value
|
||||||
|| std::is_same<IteratorType, std::string::const_iterator>::value) > {};
|
|| std::is_same<IteratorType, std::string::iterator>::value
|
||||||
|
|| std::is_same<IteratorType, std::string::const_iterator>::value);
|
||||||
|
};
|
||||||
|
|
||||||
template<typename IteratorType>
|
template<typename IteratorType>
|
||||||
struct is_std_contiguous_byte_iterator
|
struct is_std_contiguous_byte_iterator
|
||||||
|
|||||||
Generated
+15
-6
@@ -10295,17 +10295,26 @@ other iterator can be mistaken for one. (std::basic_string is only matched for
|
|||||||
char: other character types need std::char_traits specializations that the
|
char: other character types need std::char_traits specializations that the
|
||||||
standard library need not have.)
|
standard library need not have.)
|
||||||
*/
|
*/
|
||||||
template < typename IteratorType, typename CharType, bool IsByte = sizeof(CharType) == 1 && std::is_integral<CharType>::value && !std::is_same<CharType, bool>::value >
|
template<typename CharType>
|
||||||
|
struct is_byte_char_type
|
||||||
|
{
|
||||||
|
// a member, not an integral_constant argument, which astyle misformats
|
||||||
|
static constexpr bool value = sizeof(CharType) == 1 && std::is_integral<CharType>::value && !std::is_same<CharType, bool>::value;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename IteratorType, typename CharType, bool IsByte = is_byte_char_type<CharType>::value>
|
||||||
struct is_std_contiguous_byte_iterator_impl : std::false_type {};
|
struct is_std_contiguous_byte_iterator_impl : std::false_type {};
|
||||||
|
|
||||||
// (the containers are only named for byte types)
|
// (the containers are only named for byte types)
|
||||||
template<typename IteratorType, typename CharType>
|
template<typename IteratorType, typename CharType>
|
||||||
struct is_std_contiguous_byte_iterator_impl<IteratorType, CharType, true>
|
struct is_std_contiguous_byte_iterator_impl<IteratorType, CharType, true>
|
||||||
: std::integral_constant < bool, !std::is_pointer<IteratorType>::value
|
{
|
||||||
&& (std::is_same<IteratorType, typename std::vector<CharType>::iterator>::value
|
static constexpr bool value = !std::is_pointer<IteratorType>::value
|
||||||
|| std::is_same<IteratorType, typename std::vector<CharType>::const_iterator>::value
|
&& (std::is_same<IteratorType, typename std::vector<CharType>::iterator>::value
|
||||||
|| std::is_same<IteratorType, std::string::iterator>::value
|
|| std::is_same<IteratorType, typename std::vector<CharType>::const_iterator>::value
|
||||||
|| std::is_same<IteratorType, std::string::const_iterator>::value) > {};
|
|| std::is_same<IteratorType, std::string::iterator>::value
|
||||||
|
|| std::is_same<IteratorType, std::string::const_iterator>::value);
|
||||||
|
};
|
||||||
|
|
||||||
template<typename IteratorType>
|
template<typename IteratorType>
|
||||||
struct is_std_contiguous_byte_iterator
|
struct is_std_contiguous_byte_iterator
|
||||||
|
|||||||
@@ -1433,6 +1433,7 @@ template<typename T>
|
|||||||
std::vector<T> bytes_as(const std::string& text)
|
std::vector<T> bytes_as(const std::string& text)
|
||||||
{
|
{
|
||||||
std::vector<T> result;
|
std::vector<T> result;
|
||||||
|
result.reserve(text.size());
|
||||||
for (const char c : text)
|
for (const char c : text)
|
||||||
{
|
{
|
||||||
result.push_back(static_cast<T>(c));
|
result.push_back(static_cast<T>(c));
|
||||||
|
|||||||
Reference in new issue
Block a user