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

ModeAdapterFactory   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

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

1 Method

Rating   Name   Duplication   Size   Complexity  
A getAdapter() 0 24 2
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
}