GMPCalculator.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. /**
  3. * League.Uri (https://uri.thephpleague.com)
  4. *
  5. * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. declare(strict_types=1);
  11. namespace League\Uri\IPv4;
  12. use GMP;
  13. use function gmp_add;
  14. use function gmp_cmp;
  15. use function gmp_div_q;
  16. use function gmp_init;
  17. use function gmp_mod;
  18. use function gmp_mul;
  19. use function gmp_pow;
  20. use function gmp_sub;
  21. use const GMP_ROUND_MINUSINF;
  22. final class GMPCalculator implements Calculator
  23. {
  24. public function baseConvert(mixed $value, int $base): GMP
  25. {
  26. return gmp_init($value, $base);
  27. }
  28. public function pow(mixed $value, int $exponent): GMP
  29. {
  30. return gmp_pow($value, $exponent);
  31. }
  32. public function compare(mixed $value1, mixed $value2): int
  33. {
  34. return gmp_cmp($value1, $value2);
  35. }
  36. public function multiply(mixed $value1, mixed $value2): GMP
  37. {
  38. return gmp_mul($value1, $value2);
  39. }
  40. public function div(mixed $value, mixed $base): GMP
  41. {
  42. return gmp_div_q($value, $base, GMP_ROUND_MINUSINF);
  43. }
  44. public function mod(mixed $value, mixed $base): GMP
  45. {
  46. return gmp_mod($value, $base);
  47. }
  48. public function add(mixed $value1, mixed $value2): GMP
  49. {
  50. return gmp_add($value1, $value2);
  51. }
  52. public function sub(mixed $value1, mixed $value2): GMP
  53. {
  54. return gmp_sub($value1, $value2);
  55. }
  56. }