Coverage Report

Created: 2024-07-23 06:39

/src/resiprocate/resip/stack/gen/MethodHash.cxx
Line
Count
Source (jump to first uncovered line)
1
/* C++ code produced by gperf version 3.1 */
2
/* Command-line: gperf -C -D -E -L C++ -t --key-positions='*' --compare-strncmp -Z MethodHash MethodHash.gperf  */
3
4
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
5
      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
6
      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
7
      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
8
      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
9
      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
10
      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
11
      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
12
      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
13
      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
14
      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
15
      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
16
      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
17
      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
18
      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
19
      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
20
      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
21
      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
22
      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
23
      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
24
      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
25
      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
26
      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
27
/* The character set is not based on ISO-646.  */
28
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
29
#endif
30
31
#line 1 "MethodHash.gperf"
32
33
#include <string.h>
34
#include <ctype.h>
35
#include "resip/stack/MethodTypes.hxx"
36
37
namespace resip
38
{
39
#line 9 "MethodHash.gperf"
40
struct methods { const char *name; MethodTypes type; };
41
/* maximum key range = 31, duplicates = 0 */
42
43
class MethodHash
44
{
45
private:
46
  static inline unsigned int hash (const char *str, size_t len);
47
public:
48
  static const struct methods *in_word_set (const char *str, size_t len);
49
};
50
51
inline unsigned int
52
MethodHash::hash (const char *str, size_t len)
53
3.84k
{
54
3.84k
  static const unsigned char asso_values[] =
55
3.84k
    {
56
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
57
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
58
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
59
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
60
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
61
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
62
3.84k
      35, 35, 35, 35, 35,  5, 10,  5,  5,  0,
63
3.84k
       0, 15,  0,  0, 35,  0,  0,  0,  0,  0,
64
3.84k
       0, 35,  0,  0,  0,  0,  0, 35, 35,  5,
65
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
66
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
67
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
68
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
69
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
70
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
71
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
72
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
73
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
74
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
75
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
76
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
77
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
78
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
79
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
80
3.84k
      35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
81
3.84k
      35, 35, 35, 35, 35, 35
82
3.84k
    };
83
3.84k
  unsigned int hval = len;
84
85
3.84k
  switch (hval)
86
3.84k
    {
87
115
      default:
88
115
        hval += asso_values[static_cast<unsigned char>(str[8])];
89
      /*FALLTHROUGH*/
90
420
      case 8:
91
420
        hval += asso_values[static_cast<unsigned char>(str[7])];
92
      /*FALLTHROUGH*/
93
591
      case 7:
94
591
        hval += asso_values[static_cast<unsigned char>(str[6])];
95
      /*FALLTHROUGH*/
96
783
      case 6:
97
783
        hval += asso_values[static_cast<unsigned char>(str[5])];
98
      /*FALLTHROUGH*/
99
953
      case 5:
100
953
        hval += asso_values[static_cast<unsigned char>(str[4])];
101
      /*FALLTHROUGH*/
102
1.22k
      case 4:
103
1.22k
        hval += asso_values[static_cast<unsigned char>(str[3])];
104
      /*FALLTHROUGH*/
105
3.84k
      case 3:
106
3.84k
        hval += asso_values[static_cast<unsigned char>(str[2])];
107
      /*FALLTHROUGH*/
108
3.84k
      case 2:
109
3.84k
        hval += asso_values[static_cast<unsigned char>(str[1])];
110
      /*FALLTHROUGH*/
111
3.84k
      case 1:
112
3.84k
        hval += asso_values[static_cast<unsigned char>(str[0])];
113
3.84k
        break;
114
3.84k
    }
115
3.84k
  return hval;
116
3.84k
}
117
118
const struct methods *
119
MethodHash::in_word_set (const char *str, size_t len)
120
6.78k
{
121
6.78k
  enum
122
6.78k
    {
123
6.78k
      TOTAL_KEYWORDS = 16,
124
6.78k
      MIN_WORD_LENGTH = 3,
125
6.78k
      MAX_WORD_LENGTH = 9,
126
6.78k
      MIN_HASH_VALUE = 4,
127
6.78k
      MAX_HASH_VALUE = 34
128
6.78k
    };
129
130
6.78k
  static const struct methods wordlist[] =
131
6.78k
    {
132
6.78k
#line 24 "MethodHash.gperf"
133
6.78k
      {"INFO", INFO},
134
6.78k
#line 19 "MethodHash.gperf"
135
6.78k
      {"REFER", REFER},
136
6.78k
#line 14 "MethodHash.gperf"
137
6.78k
      {"INVITE", INVITE},
138
6.78k
#line 16 "MethodHash.gperf"
139
6.78k
      {"OPTIONS", OPTIONS},
140
6.78k
#line 22 "MethodHash.gperf"
141
6.78k
      {"RESPONSE", RESPONSE},
142
6.78k
#line 15 "MethodHash.gperf"
143
6.78k
      {"NOTIFY", NOTIFY},
144
6.78k
#line 25 "MethodHash.gperf"
145
6.78k
      {"SERVICE", SERVICE},
146
6.78k
#line 11 "MethodHash.gperf"
147
6.78k
      {"ACK", ACK},
148
6.78k
#line 17 "MethodHash.gperf"
149
6.78k
      {"PRACK", PRACK},
150
6.78k
#line 26 "MethodHash.gperf"
151
6.78k
      {"UPDATE", UPDATE},
152
6.78k
#line 18 "MethodHash.gperf"
153
6.78k
      {"PUBLISH", PUBLISH},
154
6.78k
#line 12 "MethodHash.gperf"
155
6.78k
      {"BYE", BYE},
156
6.78k
#line 13 "MethodHash.gperf"
157
6.78k
      {"CANCEL", CANCEL},
158
6.78k
#line 20 "MethodHash.gperf"
159
6.78k
      {"REGISTER", REGISTER},
160
6.78k
#line 23 "MethodHash.gperf"
161
6.78k
      {"MESSAGE", MESSAGE},
162
6.78k
#line 21 "MethodHash.gperf"
163
6.78k
      {"SUBSCRIBE", SUBSCRIBE}
164
6.78k
    };
165
166
6.78k
  static const signed char lookup[] =
167
6.78k
    {
168
6.78k
      -1, -1, -1, -1,  0,  1,  2,  3,  4, -1, -1,  5,  6,  7,
169
6.78k
      -1,  8,  9, 10, 11, -1, -1, 12, -1, 13, -1, -1, -1, 14,
170
6.78k
      -1, -1, -1, -1, -1, -1, 15
171
6.78k
    };
172
173
6.78k
  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
174
3.84k
    {
175
3.84k
      unsigned int key = hash (str, len);
176
177
3.84k
      if (key <= MAX_HASH_VALUE)
178
54
        {
179
54
          int index = lookup[key];
180
181
54
          if (index >= 0)
182
51
            {
183
51
              const char *s = wordlist[index].name;
184
185
51
              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
186
1
                return &wordlist[index];
187
51
            }
188
54
        }
189
3.84k
    }
190
6.78k
  return 0;
191
6.78k
}
192
#line 27 "MethodHash.gperf"
193
194
}