Coverage Report

Created: 2024-06-28 06:19

/src/cryptofuzz/fuzzing-headers/include/fuzzing/datasource/id.hpp
Line
Count
Source (jump to first uncovered line)
1
#ifndef FUZZING_DATASOURCE_ID_HPP
2
#define FUZZING_DATASOURCE_ID_HPP
3
4
#include <stdio.h>
5
#include <stdint.h>
6
#include <utility>
7
#include <map>
8
9
namespace fuzzing {
10
namespace datasource  {
11
12
/* From: https://gist.github.com/underscorediscovery/81308642d0325fd386237cfa3b44785c */
13
0
inline uint64_t hash_64_fnv1a(const void* key, const uint64_t len) {
14
0
15
0
    const char* data = (char*)key;
16
0
    uint64_t hash = 0xcbf29ce484222325;
17
0
    uint64_t prime = 0x100000001b3;
18
0
19
0
    for(uint64_t i = 0; i < len; ++i) {
20
0
        uint8_t value = data[i];
21
0
        hash = hash ^ value;
22
0
        hash *= prime;
23
0
    }
24
0
25
0
    return hash;
26
0
27
0
} //hash_64_fnv1a
28
29
// FNV1a c++11 constexpr compile time hash functions, 32 and 64 bit
30
// str should be a null terminated string literal, value should be left out 
31
// e.g hash_32_fnv1a_const("example")
32
// code license: public domain or equivalent
33
// post: https://notes.underscorediscovery.com/constexpr-fnv1a/
34
35
constexpr uint32_t val_32_const = 0x811c9dc5;
36
constexpr uint32_t prime_32_const = 0x1000193;
37
constexpr uint64_t val_64_const = 0xcbf29ce484222325;
38
constexpr uint64_t prime_64_const = 0x100000001b3;
39
40
41
233
inline constexpr uint64_t ID(const char* const str, const uint64_t value = val_64_const) noexcept {
42
233
    auto ret = (str[0] == '\0') ? value : ID(&str[1], (value ^ uint64_t(str[0])) * prime_64_const);
43
233
    return ret;
44
233
}
45
46
0
inline constexpr std::pair<const char*, uint64_t> IDPair(const char* const str, const uint64_t value = val_64_const) noexcept {
47
0
    return {str, ID(str, value)};
48
0
}
49
50
using IDMap = std::map<const char*, uint64_t>;
51
52
} /* namespace datasource */
53
} /* namespace fuzzing */
54
55
#endif