예제 #1
0
 public function testNumberOfTrailingZeros()
 {
     $this->assertEquals(32, BitUtils::numberOfTrailingZeros(0));
     $this->assertEquals(1, BitUtils::numberOfTrailingZeros(10));
     $this->assertEquals(0, BitUtils::numberOfTrailingZeros(15));
     $this->assertEquals(2, BitUtils::numberOfTrailingZeros(20));
 }
예제 #2
0
 /**
  * Gets the next unset bit position from a given position.
  *
  * @param  integer $from
  * @return integer
  */
 public function getNextUnset($from)
 {
     if ($from >= $this->size) {
         return $this->size;
     }
     $bitsOffset = $from >> 5;
     $currentBits = ~$this->bits[$bitsOffset];
     $bitsLength = count($this->bits);
     $currentBits &= ~((1 << ($from & 0x1f)) - 1);
     while ($currentBits === 0) {
         if (++$bitsOffset === $bitsLength) {
             return $this->size;
         }
         $currentBits = ~$this->bits[$bitsOffset];
     }
     $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits);
     return $result > $this->size ? $this->size : $result;
 }