Coverage Report

Created: 2023-06-07 07:09

/src/LPM/external.protobuf/include/google/protobuf/has_bits.h
Line
Count
Source (jump to first uncovered line)
1
// Protocol Buffers - Google's data interchange format
2
// Copyright 2008 Google Inc.  All rights reserved.
3
// https://developers.google.com/protocol-buffers/
4
//
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are
7
// met:
8
//
9
//     * Redistributions of source code must retain the above copyright
10
// notice, this list of conditions and the following disclaimer.
11
//     * Redistributions in binary form must reproduce the above
12
// copyright notice, this list of conditions and the following disclaimer
13
// in the documentation and/or other materials provided with the
14
// distribution.
15
//     * Neither the name of Google Inc. nor the names of its
16
// contributors may be used to endorse or promote products derived from
17
// this software without specific prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31
#ifndef GOOGLE_PROTOBUF_HAS_BITS_H__
32
#define GOOGLE_PROTOBUF_HAS_BITS_H__
33
34
#include "google/protobuf/stubs/common.h"
35
#include "google/protobuf/port.h"
36
37
// Must be included last.
38
#include "google/protobuf/port_def.inc"
39
40
#ifdef SWIG
41
#error "You cannot SWIG proto headers"
42
#endif
43
44
namespace google {
45
namespace protobuf {
46
namespace internal {
47
48
template <size_t doublewords>
49
class HasBits {
50
 public:
51
676k
  PROTOBUF_NDEBUG_INLINE constexpr HasBits() : has_bits_{} {}
52
53
3.53k
  PROTOBUF_NDEBUG_INLINE void Clear() {
54
3.53k
    memset(has_bits_, 0, sizeof(has_bits_));
55
3.53k
  }
56
57
3.53k
  PROTOBUF_NDEBUG_INLINE uint32_t& operator[](int index) {
58
3.53k
    return has_bits_[index];
59
3.53k
  }
60
61
0
  PROTOBUF_NDEBUG_INLINE const uint32_t& operator[](int index) const {
62
0
    return has_bits_[index];
63
0
  }
64
65
  bool operator==(const HasBits<doublewords>& rhs) const {
66
    return memcmp(has_bits_, rhs.has_bits_, sizeof(has_bits_)) == 0;
67
  }
68
69
  bool operator!=(const HasBits<doublewords>& rhs) const {
70
    return !(*this == rhs);
71
  }
72
73
0
  void Or(const HasBits<doublewords>& rhs) {
74
0
    for (size_t i = 0; i < doublewords; i++) has_bits_[i] |= rhs[i];
75
0
  }
76
77
  bool empty() const;
78
79
 private:
80
  uint32_t has_bits_[doublewords];
81
};
82
83
template <>
84
0
inline bool HasBits<1>::empty() const {
85
0
  return !has_bits_[0];
86
0
}
87
88
template <>
89
0
inline bool HasBits<2>::empty() const {
90
0
  return !(has_bits_[0] | has_bits_[1]);
91
0
}
92
93
template <>
94
0
inline bool HasBits<3>::empty() const {
95
0
  return !(has_bits_[0] | has_bits_[1] | has_bits_[2]);
96
0
}
97
98
template <>
99
0
inline bool HasBits<4>::empty() const {
100
0
  return !(has_bits_[0] | has_bits_[1] | has_bits_[2] | has_bits_[3]);
101
0
}
102
103
template <size_t doublewords>
104
inline bool HasBits<doublewords>::empty() const {
105
  for (size_t i = 0; i < doublewords; ++i) {
106
    if (has_bits_[i]) return false;
107
  }
108
  return true;
109
}
110
111
}  // namespace internal
112
}  // namespace protobuf
113
}  // namespace google
114
115
#include "google/protobuf/port_undef.inc"
116
117
#endif  // GOOGLE_PROTOBUF_HAS_BITS_H__