class BrickMathCalculator
A calculator using the brick/math library for arbitrary-precision arithmetic
@psalm-immutable
Hierarchy
- class \Ramsey\Uuid\Math\BrickMathCalculator implements \Ramsey\Uuid\Math\CalculatorInterface
Expanded class hierarchy of BrickMathCalculator
6 files declare their use of BrickMathCalculator
- BigNumberConverter.php in vendor/
ramsey/ uuid/ src/ Converter/ Number/ BigNumberConverter.php - BigNumberTimeConverter.php in vendor/
ramsey/ uuid/ src/ Converter/ Time/ BigNumberTimeConverter.php - BuilderCollection.php in vendor/
ramsey/ uuid/ src/ Builder/ BuilderCollection.php - FeatureSet.php in vendor/
ramsey/ uuid/ src/ FeatureSet.php - PhpTimeConverter.php in vendor/
ramsey/ uuid/ src/ Converter/ Time/ PhpTimeConverter.php
File
-
vendor/
ramsey/ uuid/ src/ Math/ BrickMathCalculator.php, line 32
Namespace
Ramsey\Uuid\MathView source
final class BrickMathCalculator implements CalculatorInterface {
private const ROUNDING_MODE_MAP = [
RoundingMode::UNNECESSARY => BrickMathRounding::UNNECESSARY,
RoundingMode::UP => BrickMathRounding::UP,
RoundingMode::DOWN => BrickMathRounding::DOWN,
RoundingMode::CEILING => BrickMathRounding::CEILING,
RoundingMode::FLOOR => BrickMathRounding::FLOOR,
RoundingMode::HALF_UP => BrickMathRounding::HALF_UP,
RoundingMode::HALF_DOWN => BrickMathRounding::HALF_DOWN,
RoundingMode::HALF_CEILING => BrickMathRounding::HALF_CEILING,
RoundingMode::HALF_FLOOR => BrickMathRounding::HALF_FLOOR,
RoundingMode::HALF_EVEN => BrickMathRounding::HALF_EVEN,
];
public function add(NumberInterface $augend, NumberInterface ...$addends) : NumberInterface {
$sum = BigInteger::of($augend->toString());
foreach ($addends as $addend) {
$sum = $sum->plus($addend->toString());
}
return new IntegerObject((string) $sum);
}
public function subtract(NumberInterface $minuend, NumberInterface ...$subtrahends) : NumberInterface {
$difference = BigInteger::of($minuend->toString());
foreach ($subtrahends as $subtrahend) {
$difference = $difference->minus($subtrahend->toString());
}
return new IntegerObject((string) $difference);
}
public function multiply(NumberInterface $multiplicand, NumberInterface ...$multipliers) : NumberInterface {
$product = BigInteger::of($multiplicand->toString());
foreach ($multipliers as $multiplier) {
$product = $product->multipliedBy($multiplier->toString());
}
return new IntegerObject((string) $product);
}
public function divide(int $roundingMode, int $scale, NumberInterface $dividend, NumberInterface ...$divisors) : NumberInterface {
$brickRounding = $this->getBrickRoundingMode($roundingMode);
$quotient = BigDecimal::of($dividend->toString());
foreach ($divisors as $divisor) {
$quotient = $quotient->dividedBy($divisor->toString(), $scale, $brickRounding);
}
if ($scale === 0) {
return new IntegerObject((string) $quotient->toBigInteger());
}
return new Decimal((string) $quotient);
}
public function fromBase(string $value, int $base) : IntegerObject {
try {
return new IntegerObject((string) BigInteger::fromBase($value, $base));
} catch (MathException|\InvalidArgumentException $exception) {
throw new InvalidArgumentException($exception->getMessage(), (int) $exception->getCode(), $exception);
}
}
public function toBase(IntegerObject $value, int $base) : string {
try {
return BigInteger::of($value->toString())
->toBase($base);
} catch (MathException|\InvalidArgumentException $exception) {
throw new InvalidArgumentException($exception->getMessage(), (int) $exception->getCode(), $exception);
}
}
public function toHexadecimal(IntegerObject $value) : Hexadecimal {
return new Hexadecimal($this->toBase($value, 16));
}
public function toInteger(Hexadecimal $value) : IntegerObject {
return $this->fromBase($value->toString(), 16);
}
/**
* Maps ramsey/uuid rounding modes to those used by brick/math
*
* @return BrickMathRounding::*
*/
private function getBrickRoundingMode(int $roundingMode) {
return self::ROUNDING_MODE_MAP[$roundingMode] ?? BrickMathRounding::UNNECESSARY;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
BrickMathCalculator::add | public | function | Returns the sum of all the provided parameters | Overrides CalculatorInterface::add |
BrickMathCalculator::divide | public | function | Returns the quotient of the provided parameters divided left-to-right | Overrides CalculatorInterface::divide |
BrickMathCalculator::fromBase | public | function | Converts a value from an arbitrary base to a base-10 integer value | Overrides CalculatorInterface::fromBase |
BrickMathCalculator::getBrickRoundingMode | private | function | Maps ramsey/uuid rounding modes to those used by brick/math | |
BrickMathCalculator::multiply | public | function | Returns the product of all the provided parameters | Overrides CalculatorInterface::multiply |
BrickMathCalculator::ROUNDING_MODE_MAP | private | constant | ||
BrickMathCalculator::subtract | public | function | Returns the difference of all the provided parameters | Overrides CalculatorInterface::subtract |
BrickMathCalculator::toBase | public | function | Converts a base-10 integer value to an arbitrary base | Overrides CalculatorInterface::toBase |
BrickMathCalculator::toHexadecimal | public | function | Converts an Integer instance to a Hexadecimal instance | Overrides CalculatorInterface::toHexadecimal |
BrickMathCalculator::toInteger | public | function | Converts a Hexadecimal instance to an Integer instance | Overrides CalculatorInterface::toInteger |