15
15
16
16
#include " fast_bitset.h"
17
17
18
+ #include " simd/bit_simd.h"
18
19
#include " vsag_exception.h"
19
20
20
21
namespace vsag {
@@ -67,10 +68,10 @@ FastBitset::Or(const Bitset& another) {
67
68
std::lock_guard<std::shared_mutex> lock2 (fast_another->mutex_ , std::adopt_lock);
68
69
auto max_size = std::max (data_.size (), fast_another->data_ .size ());
69
70
data_.resize (max_size, 0 );
70
- // TODO(LHT): use SIMD
71
- for ( uint64_t i = 0 ; i < max_size; ++i) {
72
- data_[i] |= fast_another-> data_ [i];
73
- }
71
+ BitOr ( reinterpret_cast < const uint8_t *>(data_. data ()),
72
+ reinterpret_cast < const uint8_t *>(fast_another-> data_ . data ()),
73
+ max_size * sizeof ( uint64_t ),
74
+ reinterpret_cast < uint8_t *>(data_. data ()));
74
75
}
75
76
76
77
void
@@ -84,10 +85,10 @@ FastBitset::And(const Bitset& another) {
84
85
std::lock_guard<std::shared_mutex> lock2 (fast_another->mutex_ , std::adopt_lock);
85
86
auto max_size = std::max (data_.size (), fast_another->data_ .size ());
86
87
data_.resize (max_size, 0 );
87
- // TODO(LHT): use SIMD
88
- for ( uint64_t i = 0 ; i < max_size; ++i) {
89
- data_[i] &= fast_another-> data_ [i];
90
- }
88
+ BitAnd ( reinterpret_cast < const uint8_t *>(data_. data ()),
89
+ reinterpret_cast < const uint8_t *>(fast_another-> data_ . data ()),
90
+ max_size * sizeof ( uint64_t ),
91
+ reinterpret_cast < uint8_t *>(data_. data ()));
91
92
}
92
93
93
94
void
@@ -101,10 +102,10 @@ FastBitset::Xor(const Bitset& another) {
101
102
std::lock_guard<std::shared_mutex> lock2 (fast_another->mutex_ , std::adopt_lock);
102
103
auto max_size = std::max (data_.size (), fast_another->data_ .size ());
103
104
data_.resize (max_size, 0 );
104
- // TODO(LHT): use SIMD
105
- for ( uint64_t i = 0 ; i < max_size; ++i) {
106
- data_[i] ^= fast_another-> data_ [i];
107
- }
105
+ BitXor ( reinterpret_cast < const uint8_t *>(data_. data ()),
106
+ reinterpret_cast < const uint8_t *>(fast_another-> data_ . data ()),
107
+ max_size * sizeof ( uint64_t ),
108
+ reinterpret_cast < uint8_t *>(data_. data ()));
108
109
}
109
110
110
111
std::string
@@ -133,6 +134,9 @@ FastBitset::Not() {
133
134
for (auto & word : data_) {
134
135
word = ~word;
135
136
}
137
+ BitNot (reinterpret_cast <const uint8_t *>(data_.data ()),
138
+ data_.size () * sizeof (uint64_t ),
139
+ reinterpret_cast <uint8_t *>(data_.data ()));
136
140
}
137
141
138
142
void
0 commit comments