include/simdb/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
47 / 61
77.0%
Branches:
16 / 96
16.7%
Functions:
21 / 27
77.8%

utils/ValidValue.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "simdb/Assert.hpp"
4 #include "simdb/Exceptions.hpp"
5 #include "simdb/utils/TypeTraits.hpp"
6 #include <iostream>
7 #include <utility>
8
9 namespace simdb {
10
11 template <typename T> class ValidValue
12 {
13 private:
14 T value_{};
15 bool valid_ = false;
16
17 public:
18 53666 ValidValue() = default;
19
20 4412 explicit ValidValue(const T& val) :
21 4412 value_(val),
22 4412 valid_(true)
23 {
24 4412 }
25
26 explicit ValidValue(T&& val) :
27 value_(std::move(val)),
28 valid_(true)
29 {
30 }
31
32 134318 ValidValue& operator=(const T& val)
33 {
34 134318 value_ = val;
35 134318 valid_ = true;
36 134318 return *this;
37 }
38
39 375442 ValidValue& operator=(T&& val)
40 {
41 375442 value_ = std::move(val);
42 375442 valid_ = true;
43 375442 return *this;
44 }
45
46 168458 const T& getValue() const
47 {
48
2/36
simdb::ValidValue<bool>::getValue() const:
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 21 taken 33951 times.
✗ Branch 5 → 6 not taken.
✗ Branch 6 → 7 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 19 → 20 not taken.
simdb::ValidValue<unsigned long>::getValue() const:
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 21 taken 134507 times.
✗ Branch 5 → 6 not taken.
✗ Branch 6 → 7 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 19 → 20 not taken.
simdb::ValidValue<unsigned short>::getValue() const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 21 not taken.
✗ Branch 5 → 6 not taken.
✗ Branch 6 → 7 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 19 → 20 not taken.
168458 simdb_assert(valid_, "Invalid value - not set");
49 168458 return value_;
50 }
51
52 659050 T& getValue()
53 {
54
14/60
simdb::ValidValue<bool>::getValue():
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 21 taken 4472 times.
✗ Branch 5 → 6 not taken.
✗ Branch 6 → 7 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 19 → 20 not taken.
simdb::ValidValue<int>::getValue():
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 21 not taken.
✓ Branch 5 → 6 taken 1 time.
✓ Branch 6 → 7 taken 1 time.
✓ Branch 8 → 9 taken 1 time.
✓ Branch 12 → 13 taken 1 time.
✓ Branch 13 → 14 taken 1 time.
✓ Branch 14 → 15 taken 1 time.
✓ Branch 15 → 16 taken 1 time.
✓ Branch 16 → 17 taken 1 time.
✓ Branch 17 → 18 taken 1 time.
✓ Branch 19 → 20 taken 1 time.
simdb::ValidValue<unsigned int>::getValue():
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 21 taken 567774 times.
✗ Branch 5 → 6 not taken.
✗ Branch 6 → 7 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 19 → 20 not taken.
simdb::ValidValue<unsigned long>::getValue():
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 21 taken 86803 times.
✗ Branch 5 → 6 not taken.
✗ Branch 6 → 7 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 19 → 20 not taken.
simdb::ValidValue<unsigned short>::getValue():
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 21 not taken.
✗ Branch 5 → 6 not taken.
✗ Branch 6 → 7 not taken.
✗ Branch 8 → 9 not taken.
✗ Branch 12 → 13 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 15 → 16 not taken.
✗ Branch 16 → 17 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 19 → 20 not taken.
659052 simdb_assert(valid_, "Invalid value - not set");
55 659049 return value_;
56 }
57
58 operator const T&() const { return getValue(); }
59
60 474673 operator T&() { return getValue(); }
61
62 820607 bool isValid() const { return valid_; }
63
64 375321 void clearValid() { valid_ = false; }
65 };
66
67 } // namespace simdb
68
69 template <typename T> inline std::ostream& operator<<(std::ostream& os, const simdb::ValidValue<T>& vv)
70 {
71 static_assert(simdb::type_traits::has_ostream_operator_v<T>);
72 if (!vv.isValid())
73 {
74 return os << "<INVALID>";
75 }
76 return os << vv.getValue();
77 }
78