28 size_t len_str = strlen(str);
29 if (len_ss != len_str)
31 return (strncmp(ss.
begin, str, len_ss) == 0);
43 THROW(
"Unknown hash function: " << s);
60 std::vector<substring> tokens;
63 bool in_escape =
false;
64 char* reading_head = s.
begin;
65 char* writing_head = s.
begin;
67 while (reading_head < s.
end)
69 char current_character = *reading_head++;
73 *writing_head++ = current_character;
78 if (current_character == delim)
80 current.
end = writing_head++;
82 if (current.
begin != current.
end || allow_empty)
84 tokens.push_back(current);
88 current.
begin = writing_head;
89 current.
end = writing_head;
91 else if (current_character ==
'\\')
93 in_escape = !in_escape;
97 *writing_head++ = current_character;
102 current.
end = writing_head;
104 if (current.
begin != current.
end || allow_empty)
106 tokens.push_back(current);
118 std::ostream& operator<<(std::ostream& os, const v_array<substring>& ss)
129 for (it++; it != ss.cend(); it++)
size_t substring_len(substring &s)
bool operator!=(const substring &ss, const char *str)
bool operator==(const substring &ss, const char *str)
std::ostream & operator<<(std::ostream &os, const substring &ss)
hash_func_t getHasher(const std::string &s)
std::vector< substring > escaped_tokenize(char delim, substring s, bool allow_empty)
VW_STD14_CONSTEXPR uint64_t hashall(substring s, uint64_t h)
VW_STD14_CONSTEXPR uint64_t hashstring(substring s, uint64_t h)
bool substring_equal(const substring &a, const substring &b)
uint64_t(* hash_func_t)(substring, uint64_t)