Completed
Push — master ( 2683bd...cf87f7 )
by Jordan
21s queued 13s
created

ModeAdapterFactory::getAdapter()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 24
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 17
c 1
b 0
f 0
nc 2
nop 3
dl 0
loc 24
ccs 18
cts 18
cp 1
crap 2
rs 9.7
1
<?php
2
3
namespace Samsara\Fermat\Provider\RoundingModeAdapters;
4
5
use Samsara\Fermat\Enums\RoundingMode;
6
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\BaseAdapter;
7
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\CeilAdapter;
8
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\FloorAdapter;
9
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\HalfAlternatingAdapter;
10
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\HalfDownAdapter;
11
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\HalfEvenAdapter;
12
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\HalfInfAdapter;
13
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\HalfOddAdapter;
14
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\HalfRandomAdapter;
15
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\HalfUpAdapter;
16
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\HalfZeroAdapter;
17
use Samsara\Fermat\Provider\RoundingModeAdapters\Modes\StochasticAdapter;
18
use Samsara\Fermat\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 860
    public static function getAdapter(RoundingMode $mode, bool $isNegative, ?string $remainder): BaseAdapter
35
    {
36 860
        if (isset(self::$modeAdapters[$mode->name])) {
0 ignored issues
show
Bug introduced by
The property name does not seem to exist on Samsara\Fermat\Enums\RoundingMode.
Loading history...
37 854
            return self::$modeAdapters[$mode->name]->setNegative($isNegative)->setRemainder($remainder);
38
        }
39
40 13
        $adapter = match ($mode) {
41 13
            RoundingMode::HalfEven => new HalfEvenAdapter($isNegative, $remainder),
42 12
            RoundingMode::HalfOdd => new HalfOddAdapter($isNegative, $remainder),
43 11
            RoundingMode::HalfUp => new HalfUpAdapter($isNegative, $remainder),
44 10
            RoundingMode::HalfDown => new HalfDownAdapter($isNegative, $remainder),
45 9
            RoundingMode::HalfZero => new HalfZeroAdapter($isNegative, $remainder),
46 8
            RoundingMode::HalfInf => new HalfInfAdapter($isNegative, $remainder),
47 7
            RoundingMode::HalfRandom => new HalfRandomAdapter($isNegative, $remainder),
48 6
            RoundingMode::HalfAlternating => new HalfAlternatingAdapter($isNegative, $remainder),
49 5
            RoundingMode::Ceil => new CeilAdapter($isNegative, $remainder),
50 4
            RoundingMode::Floor => new FloorAdapter($isNegative, $remainder),
51 1
            RoundingMode::Truncate => new TruncateAdapter($isNegative, $remainder),
52 1
            RoundingMode::Stochastic => new StochasticAdapter($isNegative, $remainder)
53
        };
54
55 13
        self::$modeAdapters[$mode->name] = $adapter;
56
57 13
        return $adapter;
58
    }
59
}