Completed
Push — master ( a99ba3...e0e6fe )
by Michal
02:44
created

Ternary   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 3
dl 0
loc 34
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A isOperator() 0 3 1
A operate() 0 20 4
A isOpen() 0 3 1
1
<?php
2
/*
3
    Copyright (c) 2016 Michal Čihař <[email protected]>
4
5
    This file is part of SimpleMath.
6
7
    This program is free software; you can redistribute it and/or modify
8
    it under the terms of the GNU General Public License as published by
9
    the Free Software Foundation; either version 2 of the License, or
10
    (at your option) any later version.
11
12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16
17
    You should have received a copy of the GNU General Public License along
18
    with this program; if not, write to the Free Software Foundation, Inc.,
19
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
*/
21
namespace SimpleMath\Expressions;
22
23
class Ternary extends \SimpleMath\Expression {
24
25
    protected $precidence = 1;
26
    protected $leftAssoc = false;
27
28
    public function isOperator() {
29
        return true;
30
    }
31
32
    public function operate(\SimpleMath\Stack $stack, $variables=array()) {
33
        if (! $this->isOpen()) {
34
            $right = $stack->pop()->operate($stack, $variables);
35
            $left = $stack->pop()->operate($stack, $variables);
36
            return new TernaryIntermediate(array($left, $right));
37
        } else {
38
            $right = $stack->pop()->operate($stack, $variables);
39
            $left = $stack->pop()->operate($stack, $variables);
40
            if ($right instanceof TernaryIntermediate) {
41
                $right = $right->getValues();
42
            } else {
43
                throw new \RuntimeException('Mismatched ternary operator!');
44
            }
45
            if ($left) {
46
                return $right[0];
47
            } else {
48
                return $right[1];
49
            }
50
        }
51
    }
52
53
    public function isOpen() {
54
        return $this->value == '?';
55
    }
56
}
57