原文
struct ReverseBitRange
{
enum bitsPerWord = size_t.sizeof * 8;
private
{
const(size_t)*bits;
size_t cur;
size_t idx;
size_t len;
}
@nogc nothrow pure:
this(const(size_t)* bitarr, size_t numBits) @system
{
bits = bitarr + (numBits - 1) / bitsPerWord;
len = numBits;
idx = numBits - 1;
if (len)
{
cur = *bits-- ^ (size_t(1) << idx);
popFront();
}
}
size_t front()
{
assert(!empty);
return idx;
}
bool empty() const
{
return idx < 0;
}
void popFront() @system
{
auto curbit = idx % bitsPerWord;
cur ^= size_t(1) << curbit;
if (!cur)
{
idx -= curbit;
while (!cur)
{
if ((idx -= bitsPerWord) >= len)
return;
cur = *bits--;
}
idx += bsr(cur);
}
else
{
idx -= curbit - bsr(cur);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现