From 71f28db1b8e26377d56f0eb0aef01f6c6c3afbd0 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Wed, 14 Sep 2022 17:44:42 +0300 Subject: feat: implement bitscanAndReset --- src/bitboard.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/bitboard.c') diff --git a/src/bitboard.c b/src/bitboard.c index e9a7d53..cffe40f 100644 --- a/src/bitboard.c +++ b/src/bitboard.c @@ -25,6 +25,13 @@ inline Bitboard ls1b(Bitboard bb) { /* Log base 2 (aka Trailing Zero Count) * Only works for SINGLE Bitboards * Useful for calculating bit-index of LS1B */ -inline Bitboard bitscan(Bitboard bb) { +inline int bitscan(Bitboard bb) { return pop_count(ls1b(bb) - 1); } + +/* Bitscan forward with LS1B reset */ +inline int bitscanAndReset(Bitboard* bb) { + int idx = bitscan(*bb); + *bb &= *bb - 1; + return idx; +} -- cgit v1.2.3