* Return the position of the first bit non zero in bitarray
*
* \param bitx BitArray context
* Return the position of the first bit non zero in bitarray
*
* \param bitx BitArray context
- * \param idx Starting bit
- * \param offset Number of bits to test
* \return Position in bitarray when firt bit non zero occur, -1 otherwise
*/
int bitarray_firstSetBit(BitArray *bitx)
{
ASSERT(bitx);
* \return Position in bitarray when firt bit non zero occur, -1 otherwise
*/
int bitarray_firstSetBit(BitArray *bitx)
{
ASSERT(bitx);
- uint32_t *b = (uint32_t *)bitx->array;
- int pos = -1;
- int curr = 0;
- int i = 0;
+ uint8_t *b = bitx->array;
size_t bytes = bitx->size;
size_t bytes = bitx->size;
- if (bytes < 4)
- {
- uint32_t data = 0;
- memcpy(&data, &b[i], bytes);
-
- if (data == 0)
- return -1;
+ uint32_t data = 0;
+ size_t len = MIN(bytes, (size_t)4);
+ memcpy(&data, b, len);
return (DeBruijn_coefficents[((uint32_t)((data & -data) * 0x077CB531U)) >> 27] + curr);
return (DeBruijn_coefficents[((uint32_t)((data & -data) * 0x077CB531U)) >> 27] + curr);
- }
-
- if (b[i])
- {
- pos = DeBruijn_coefficents[((uint32_t)((b[i] & -b[i]) * 0x077CB531U)) >> 27] + curr;
- break;
- }