ModeAdapterFactory   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 35
ccs 18
cts 18
cp 1
rs 10
c 0
b 0
f 0
eloc 19
wmc 2

1 Method

Rating   Name   Duplication   Size   Complexity  
A getAdapter() 0 24 2
1
<?php
2
3
namespace Samsara\Fermat\Core\Provider\RoundingModeAdapters;
4
5
use Samsara\Fermat\Core\Enums\RoundingMode;
6
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\BaseAdapter;
7
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\CeilAdapter;
8
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\FloorAdapter;
9
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\HalfAlternatingAdapter;
10
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\HalfDownAdapter;
11
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\HalfEvenAdapter;
12
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\HalfInfAdapter;
13
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\HalfOddAdapter;
14
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\HalfRandomAdapter;
15
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\HalfUpAdapter;
16
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\HalfZeroAdapter;
17
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\StochasticAdapter;
18
use Samsara\Fermat\Core\Provider\RoundingModeAdapters\Modes\TruncateAdapter;
19
20
/**
21
 *
22
 */
23
class ModeAdapterFactory
24
{
25
    /** @var BaseAdapter[] */
26
    private static array $modeAdapters = [];
27
28
    /**
29
     * @param RoundingMode $mode
30
     * @param bool $isNegative
31
     * @param string|null $remainder
32
     * @return BaseAdapter
33
     */
34 2970
    public static function getAdapter(RoundingMode $mode, bool $isNegative, ?string $remainder): BaseAdapter
35
    {
36 2970
        if (isset(self::$modeAdapters[$mode->name])) {
0 ignored issues
show
Bug introduced by
The property name does not seem to exist on Samsara\Fermat\Core\Enums\RoundingMode.
Loading history...
37 2958
            return self::$modeAdapters[$mode->name]->setNegative($isNegative)->setRemainder($remainder);
38
        }
39
40 18
        $adapter = match ($mode) {
41 18
            RoundingMode::HalfEven => new HalfEvenAdapter($isNegative, $remainder),
42 18
            RoundingMode::HalfOdd => new HalfOddAdapter($isNegative, $remainder),
43 16
            RoundingMode::HalfUp => new HalfUpAdapter($isNegative, $remainder),
44 14
            RoundingMode::HalfDown => new HalfDownAdapter($isNegative, $remainder),
45 12
            RoundingMode::HalfZero => new HalfZeroAdapter($isNegative, $remainder),
46 10
            RoundingMode::HalfInf => new HalfInfAdapter($isNegative, $remainder),
47 8
            RoundingMode::HalfRandom => new HalfRandomAdapter($isNegative, $remainder),
48 6
            RoundingMode::HalfAlternating => new HalfAlternatingAdapter($isNegative, $remainder),
49 4
            RoundingMode::Ceil => new CeilAdapter($isNegative, $remainder),
50 4
            RoundingMode::Floor => new FloorAdapter($isNegative, $remainder),
51 4
            RoundingMode::Truncate => new TruncateAdapter($isNegative, $remainder),
52 2
            RoundingMode::Stochastic => new StochasticAdapter($isNegative, $remainder)
53
        };
54
55 18
        self::$modeAdapters[$mode->name] = $adapter;
56
57 18
        return $adapter;
58
    }
59
}