GCC Code Coverage Report


ernie/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
0 / 2
0.0%
Branches:
0 / 74
0.0%
Functions:
-
-%

util/library.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 /// @file library.h
3 /// @brief Shared libraries opened at run time, for optional drivers such as CUDA's that Ernie
4 /// neither links nor requires.
5 #pragma once
6
7 #include <initializer_list>
8
9 namespace ernie {
10
11 /// @brief An opened shared library, closed when destroyed.
12 class SharedLibrary {
13 public:
14 /// @brief Opens the first of `names` that loads.
15 /// @return Whether one did.
16 bool Open(std::initializer_list<const char*> names);
17 ~SharedLibrary();
18 SharedLibrary() = default;
19 SharedLibrary(const SharedLibrary&) = delete;
20 SharedLibrary& operator=(const SharedLibrary&) = delete;
21
22 explicit operator bool() const {
23 return handle_ != nullptr;
24 }
25 /// @return The address of `name`, or null when the library has none.
26 void* Symbol(const char* name) const;
27 /// @brief Looks up `name` as a function pointer of type `F`.
28 /// @return Whether it was found.
29 ✗ template <typename F> bool Load(F& function, const char* name) const {
30
0/74
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 70 not taken.
✗ Branch 71 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 79 not taken.
✗ Branch 80 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 88 not taken.
✗ Branch 89 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✗ Branch 97 not taken.
✗ Branch 98 not taken.
✗ Branch 100 not taken.
✗ Branch 101 not taken.
✗ Branch 103 not taken.
✗ Branch 104 not taken.
✗ Branch 106 not taken.
✗ Branch 107 not taken.
✗ Branch 109 not taken.
✗ Branch 110 not taken.
✗ function = reinterpret_cast<F>(Symbol(name));
31 return function != nullptr;
32 }
33
34 private:
35 void* handle_ = nullptr;
36 };
37
38 } // namespace ernie
39