aboutsummaryrefslogtreecommitdiffstats
path: root/vbench/src/vbench/http/hex_number.cpp
blob: d8bc3e0042820473d030a03e9bc7c8553866d018 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include "hex_number.h"

namespace vbench {

HexNumber::HexNumber(const char *str)
    : _value(0),
      _length(0)
{
    while (*str != '\0') {
        switch (*str++) {
        case '0': _value = (_value << 4) + 0; break;
        case '1': _value = (_value << 4) + 1; break;
        case '2': _value = (_value << 4) + 2; break;
        case '3': _value = (_value << 4) + 3; break;
        case '4': _value = (_value << 4) + 4; break;
        case '5': _value = (_value << 4) + 5; break;
        case '6': _value = (_value << 4) + 6; break;
        case '7': _value = (_value << 4) + 7; break;
        case '8': _value = (_value << 4) + 8; break;
        case '9': _value = (_value << 4) + 9; break;
        case 'a': case 'A': _value = (_value << 4) + 10; break;
        case 'b': case 'B': _value = (_value << 4) + 11; break;
        case 'c': case 'C': _value = (_value << 4) + 12; break;
        case 'd': case 'D': _value = (_value << 4) + 13; break;
        case 'e': case 'E': _value = (_value << 4) + 14; break;
        case 'f': case 'F': _value = (_value << 4) + 15; break;
        default: return;
        }
        ++_length;
    }
}

} // namespace vbench