// Copyright 2026 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "util/bit_vector.h" #include namespace openscreen { BitVector::BitVector(size_t size, Fill fill) { Resize(size, fill); } void BitVector::Resize(size_t size, Fill fill) { size_ = size; v_.assign((size + kBitsPerWord - 1) / kBitsPerWord, fill ? ~uint64_t{0} : uint64_t{0}); if (fill && size % kBitsPerWord != 0) { v_.back() &= (uint64_t{1} << (size % kBitsPerWord)) - 1; } } size_t BitVector::FindFirstSet() const { for (size_t i = 0; i < v_.size(); ++i) { if (v_[i] != 0) { size_t pos = i * kBitsPerWord + std::countr_zero(v_[i]); return (pos < size_) ? pos : size_; } } return size_; } } // namespace openscreen