Vowpal Wabbit
hashstring.h
Go to the documentation of this file.
1 #pragma once
2 #include <cstdint> // defines size_t
3 #include "hash.h"
4 
5 #include "future_compat.h"
6 
7 struct substring
8 {
9  char* begin;
10  char* end;
11 };
12 
13 VW_STD14_CONSTEXPR inline uint64_t hashall(substring s, uint64_t h)
14 {
15  return uniform_hash((unsigned char*)s.begin, s.end - s.begin, h);
16 }
17 
18 VW_STD14_CONSTEXPR inline uint64_t hashstring(substring s, uint64_t h)
19 {
20  // trim leading whitespace but not UTF-8
21  for (; s.begin < s.end && *(s.begin) <= 0x20 && (int)*(s.begin) >= 0; s.begin++)
22  ;
23  // trim trailing white space but not UTF-8
24  for (; s.end > s.begin && *(s.end - 1) <= 0x20 && (int)*(s.end - 1) >= 0; s.end--)
25  ;
26 
27  size_t ret = 0;
28  char* p = s.begin;
29  while (p != s.end)
30  if (*p >= '0' && *p <= '9')
31  ret = 10 * ret + *(p++) - '0';
32  else
33  return uniform_hash((unsigned char*)s.begin, s.end - s.begin, h);
34 
35  return ret + h;
36 }
char * end
Definition: hashstring.h:10
char * begin
Definition: hashstring.h:9
VW_STD14_CONSTEXPR uint64_t uniform_hash(const void *key, size_t len, uint64_t seed)
Definition: hash.h:67
VW_STD14_CONSTEXPR uint64_t hashall(substring s, uint64_t h)
Definition: hashstring.h:13
VW_STD14_CONSTEXPR uint64_t hashstring(substring s, uint64_t h)
Definition: hashstring.h:18