@@ 413-448 (lines=36) @@ | ||
410 | * @return void |
|
411 | * @throws InvalidArgumentException On a non string is given as Parameter |
|
412 | */ |
|
413 | public function setBinaryBitsetLe($bitset) |
|
414 | { |
|
415 | if (!is_string($bitset)) { |
|
416 | throw new InvalidArgumentException('Bitset must be a string'); |
|
417 | } |
|
418 | ||
419 | $size = strlen($this->bitset); |
|
420 | $sizeIn = strlen($bitset); |
|
421 | ||
422 | if ($sizeIn < $size) { |
|
423 | // add "\0" if the given bitset is not long enough |
|
424 | $bitset .= str_repeat("\0", $size - $sizeIn); |
|
425 | } elseif ($sizeIn > $size) { |
|
426 | if (trim(substr($bitset, $size), "\0") !== '') { |
|
427 | throw new InvalidArgumentException('Out-Of-Range bits detected'); |
|
428 | } |
|
429 | $bitset = substr($bitset, 0, $size); |
|
430 | } |
|
431 | ||
432 | // truncate out-of-range bits of last byte |
|
433 | $lastByteMaxOrd = $this->ordinalMax % 8; |
|
434 | if ($lastByteMaxOrd !== 0) { |
|
435 | $lastByte = $bitset[$size - 1]; |
|
436 | $lastByteExpected = chr((1 << $lastByteMaxOrd) - 1) & $lastByte; |
|
437 | if ($lastByte !== $lastByteExpected) { |
|
438 | throw new InvalidArgumentException('Out-Of-Range bits detected'); |
|
439 | } |
|
440 | ||
441 | $this->bitset = substr($bitset, 0, -1) . $lastByteExpected; |
|
442 | } |
|
443 | ||
444 | $this->bitset = $bitset; |
|
445 | ||
446 | // reset the iterator position |
|
447 | $this->rewind(); |
|
448 | } |
|
449 | ||
450 | /** |
|
451 | * Get binary bitset in big-endian order |
@@ 395-430 (lines=36) @@ | ||
392 | * @return void |
|
393 | * @throws InvalidArgumentException On a non string is given as Parameter |
|
394 | */ |
|
395 | public function setBinaryBitsetLe($bitset) |
|
396 | { |
|
397 | if (!is_string($bitset)) { |
|
398 | throw new InvalidArgumentException('Bitset must be a string'); |
|
399 | } |
|
400 | ||
401 | $size = strlen($this->bitset); |
|
402 | $sizeIn = strlen($bitset); |
|
403 | ||
404 | if ($sizeIn < $size) { |
|
405 | // add "\0" if the given bitset is not long enough |
|
406 | $bitset .= str_repeat("\0", $size - $sizeIn); |
|
407 | } elseif ($sizeIn > $size) { |
|
408 | if (trim(substr($bitset, $size), "\0") !== '') { |
|
409 | throw new InvalidArgumentException('Out-Of-Range bits detected'); |
|
410 | } |
|
411 | $bitset = substr($bitset, 0, $size); |
|
412 | } |
|
413 | ||
414 | // truncate out-of-range bits of last byte |
|
415 | $lastByteMaxOrd = $this->ordinalMax % 8; |
|
416 | if ($lastByteMaxOrd !== 0) { |
|
417 | $lastByte = $bitset[$size - 1]; |
|
418 | $lastByteExpected = chr((1 << $lastByteMaxOrd) - 1) & $lastByte; |
|
419 | if ($lastByte !== $lastByteExpected) { |
|
420 | throw new InvalidArgumentException('Out-Of-Range bits detected'); |
|
421 | } |
|
422 | ||
423 | $this->bitset = substr($bitset, 0, -1) . $lastByteExpected; |
|
424 | } |
|
425 | ||
426 | $this->bitset = $bitset; |
|
427 | ||
428 | // reset the iterator position |
|
429 | $this->rewind(); |
|
430 | } |
|
431 | ||
432 | /** |
|
433 | * Get binary bitset in big-endian order |