Files
third_party_re2/re2/bitmap256.cc
T
ganchuantao1 720274a4cd re2 解压缩包
Signed-off-by:ganchuantao1<ganchuantao1@huawei.com>

Signed-off-by: ganchuantao1 <ganchuantao1@huawei.com>
2025-07-08 19:03:16 +08:00

45 lines
1.0 KiB
C++

// Copyright 2023 The RE2 Authors. All Rights Reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
#include "re2/bitmap256.h"
#include <stdint.h>
#include "absl/base/attributes.h"
#include "absl/log/absl_check.h"
namespace re2 {
int Bitmap256::FindNextSetBit(int c) const {
ABSL_DCHECK_GE(c, 0);
ABSL_DCHECK_LE(c, 255);
// Check the word that contains the bit. Mask out any lower bits.
int i = c / 64;
uint64_t word = words_[i] & (~uint64_t{0} << (c % 64));
if (word != 0)
return (i * 64) + FindLSBSet(word);
// Check any following words.
i++;
switch (i) {
case 1:
if (words_[1] != 0)
return (1 * 64) + FindLSBSet(words_[1]);
ABSL_FALLTHROUGH_INTENDED;
case 2:
if (words_[2] != 0)
return (2 * 64) + FindLSBSet(words_[2]);
ABSL_FALLTHROUGH_INTENDED;
case 3:
if (words_[3] != 0)
return (3 * 64) + FindLSBSet(words_[3]);
ABSL_FALLTHROUGH_INTENDED;
default:
return -1;
}
}
} // namespace re2