Completed
Push — master ( a65034...5a3549 )
by Michal
03:28
created

Ternary::isOpen()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
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 Operator {
24
25
    protected $precidence = 1;
26
    protected $leftAssoc = false;
27
28
    public function operate(\SimpleMath\Stack $stack, $variables=array()) {
29
        if (! $this->isOpen()) {
30
            $right = $stack->pop()->operate($stack, $variables);
31
            $left = $stack->pop()->operate($stack, $variables);
32
            return new TernaryIntermediate(array($left, $right));
33
        } else {
34
            $right = $stack->pop()->operate($stack, $variables);
35
            $left = $stack->pop()->operate($stack, $variables);
36
            if ($right instanceof TernaryIntermediate) {
37
                $right = $right->getValues();
38
            } else {
39
                throw new \RuntimeException('Mismatched ternary operator!');
40
            }
41
            if ($left) {
42
                return $right[0];
43
            } else {
44
                return $right[1];
45
            }
46
        }
47
    }
48
49
    public function isOpen() {
50
        return $this->value == '?';
51
    }
52
53
}
54
55
56