#include "src/trace_processor/containers/bit_vector.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <initializer_list>
#include <limits>
#include <utility>
#include <vector>
#include "perfetto/base/build_config.h"
#include "perfetto/base/compiler.h"
#include "perfetto/base/logging.h"
#include "perfetto/public/compiler.h"
#include "protos/perfetto/trace_processor/serialization.pbzero.h"
#if PERFETTO_BUILDFLAG(PERFETTO_X64_CPU_OPT)
#include <immintrin.h>
#endif
namespace perfetto::trace_processor {
namespace {
PERFETTO_ALWAYS_INLINE uint64_t PdepSlow(uint64_t word, uint64_t mask) { … }
PERFETTO_ALWAYS_INLINE uint64_t Pdep(uint64_t word, uint64_t mask) { … }
PERFETTO_ALWAYS_INLINE uint64_t PextSlow(uint64_t word, uint64_t mask) { … }
PERFETTO_ALWAYS_INLINE uint64_t Pext(uint64_t word, uint64_t mask) { … }
PERFETTO_ALWAYS_INLINE uint32_t Tzcnt(uint64_t value) { … }
}
BitVector::BitVector() = default;
BitVector::BitVector(std::initializer_list<bool> init) { … }
BitVector::BitVector(uint32_t count, bool value) { … }
BitVector::BitVector(std::vector<uint64_t> words,
std::vector<uint32_t> counts,
uint32_t size)
: … { … }
void BitVector::Resize(uint32_t new_size, bool filler) { … }
BitVector BitVector::Copy() const { … }
void BitVector::Not() { … }
void BitVector::Or(const BitVector& sec) { … }
void BitVector::And(const BitVector& sec) { … }
void BitVector::UpdateSetBits(const BitVector& update) { … }
void BitVector::SelectBits(const BitVector& mask_bv) { … }
BitVector BitVector::FromSortedIndexVector(
const std::vector<int64_t>& indices) { … }
BitVector BitVector::FromUnsortedIndexVector(
const std::vector<uint32_t>& indices) { … }
BitVector BitVector::IntersectRange(uint32_t range_start,
uint32_t range_end) const { … }
std::vector<uint32_t> BitVector::GetSetBitIndices() const { … }
void BitVector::Serialize(
protos::pbzero::SerializedColumn::BitVector* msg) const { … }
void BitVector::Deserialize(
const protos::pbzero::SerializedColumn::BitVector::Decoder& bv_msg) { … }
}