note description: "Summary description for {LIMB_BIT_SCANNING}." author: "" date: "$Date$" revision: "$Revision$" deferred class LIMB_BIT_SCANNING inherit LIMB_DEFINITION feature leading_zeros (limb_a: NATURAL_32): INTEGER do if limb_a = 0 then Result := limb_bits else Result := count_leading_zeros (limb_a) end end most_significant_one (limb_a: NATURAL_32): INTEGER -- 31 high, 0 low require limb_a /= 0 do Result := limb_high_bit - leading_zeros (limb_a) end trailing_zeros (limb_a: NATURAL_32): INTEGER -- 31 high, 0 low require limb_a /= 0 do Result := count_trailing_zeros (limb_a) end feature {NONE} -- Implementation count_trailing_zeros (limb_a: NATURAL_32): INTEGER external "C inline" alias "[ return __builtin_ctz ($limb_a); ]" end count_leading_zeros (limb_a: NATURAL_32): INTEGER external "C inline" alias "[ return __builtin_clz ($limb_a); ]" end end