reconnoiter /ui/web/lib/Reconnoiter_RPN.php

Language PHP Lines 87
MD5 Hash a8ab507c86cf05cd177a1f6878fc4525
Repository https://github.com/brad-marshall/reconnoiter.git View Raw File View Project SPDX
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php

class Reconnoiter_RPN {
  function rpn_eval($value, $expr) {
    $s = array();
    $ops = explode(",", $expr);
    array_unshift($s, $value);
    foreach($ops as $op) {
      switch($op) {
        case 'ln':
          $v = array_shift($s);
          array_unshift($s, is_null($v) ? $v : log($v)); break;
        case 'round':
          $r = array_shift($s);
          $l = array_shift($s);
          array_unshift($s, is_null($l) ? $l : round($l,$r));
          break;
        case 'floor':
          $v = array_shift($s);
          array_unshift($s, is_null($v) ? $v : floor($v)); break;
        case 'ceil':
          $v = array_shift($s);
          array_unshift($s, is_null($v) ? $v : ceil($v)); break;
        case 'log':
          $r = array_shift($s);
          $l = array_shift($s);
          array_unshift($s, is_null($l) ? $l : log($l,$r));
          break;
        case 'e':
          array_unshift($s, exp(1)); break;
        case 'pi':
          array_unshift($s, pi()); break;
        case '^':
          $r = array_shift($s);
          $l = array_shift($s);
          array_unshift($s, (is_null($r) || is_null($l)) ? NULL : pow($l,$r));
          break;
        case '-':
          $r = array_shift($s);
          $l = array_shift($s);
          array_unshift($s, (is_null($r) || is_null($l)) ? NULL : ($l-$r));
          break;
        case '/':
          $r = array_shift($s);
          $l = array_shift($s);
          array_unshift($s, (is_null($r) || is_null($l) || $r == 0) ? NULL : ($l/$r));
          break;
        case '.':
          array_unshift($s, $s[array_shift($s)]); break;
        case '+':
          $r = array_shift($s);
          $l = array_shift($s);
          array_unshift($s, (is_null($r) || is_null($l)) ? NULL : ($l+$r));
          break;
        case '*':
          $r = array_shift($s);
          $l = array_shift($s);
          array_unshift($s, (is_null($r) || is_null($l)) ? NULL : ($l*$r));
          break;
        case 'auto':
          $v = array_shift($s);
          array_unshift($s, is_null($v) ? $v : $this->autounits($v)); break;
        case 'min':
          $r = array_shift($s);
          $l = array_shift($s);
          if(is_null($r)) array_unshift($s,$l);
          else if(is_null($l)) array_unshift($s,$r);
          else array_unshift($s, min($r,$l));
          break;
        case 'max':
          $r = array_shift($s);
          $l = array_shift($s);
          if(is_null($r)) array_unshift($s,$l);
          else if(is_null($l)) array_unshift($s,$r);
          else array_unshift($s, max($r,$l));
          break;
        default:
          if(preg_match('/^-?\d+$/', $op)) {
            array_unshift($s, $op);
          }
      }
    }
    $value = array_shift($s);
    return $value;
  }
}
Back to Top