5#ifndef BITCOIN_TEST_UTIL_STR_H
6#define BITCOIN_TEST_UTIL_STR_H
14template <
typename CharType,
size_t StringLength>
15bool NextString(CharType (&
string)[StringLength], CharType min_char, CharType max_char)
17 for (CharType& elem :
string) {
18 bool has_next = elem != max_char;
19 elem = elem < min_char || elem >= max_char ? min_char : CharType(elem + 1);
20 if (has_next)
return true;
29template <
typename CharType,
size_t StringLength,
typename Fn>
30void ForEachNoDup(CharType (&
string)[StringLength], CharType min_char, CharType max_char, Fn&& fn) {
31 for (
bool has_next =
true; has_next; has_next =
NextString(
string, min_char, max_char)) {
33 bool skip_string =
false;
34 for (CharType c :
string) {
35 if (c == prev) skip_string =
true;
36 if (skip_string || c < min_char || c > max_char)
break;
39 if (!skip_string) fn();
void ForEachNoDup(CharType(&string)[StringLength], CharType min_char, CharType max_char, Fn &&fn)
Iterate over string values and call function for each string without successive duplicate characters.
bool NextString(CharType(&string)[StringLength], CharType min_char, CharType max_char)
Increment a string.