summaryrefslogtreecommitdiffstats
path: root/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2024-05-27 13:08:29 +0200
committerAnton Luka Šijanec <anton@sijanec.eu>2024-05-27 13:08:29 +0200
commit75160b12821f7f4299cce7f0b69c83c1502ae071 (patch)
tree27e25e4ccaef45f0c58b22831164050d1af1d4db /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token
parentprvi-commit (diff)
download1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.gz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.bz2
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.lz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.xz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.zst
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.zip
Diffstat (limited to 'vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token')
-rw-r--r--vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token/Stack.php149
1 files changed, 149 insertions, 0 deletions
diff --git a/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token/Stack.php b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token/Stack.php
new file mode 100644
index 0000000..54a4a58
--- /dev/null
+++ b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token/Stack.php
@@ -0,0 +1,149 @@
+<?php
+
+namespace PhpOffice\PhpSpreadsheet\Calculation\Token;
+
+use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
+
+class Stack
+{
+ /**
+ * The parser stack for formulae.
+ *
+ * @var mixed[]
+ */
+ private $stack = [];
+
+ /**
+ * Count of entries in the parser stack.
+ *
+ * @var int
+ */
+ private $count = 0;
+
+ /**
+ * Return the number of entries on the stack.
+ *
+ * @return int
+ */
+ public function count()
+ {
+ return $this->count;
+ }
+
+ /**
+ * Push a new entry onto the stack.
+ *
+ * @param mixed $type
+ * @param mixed $value
+ * @param mixed $reference
+ * @param null|string $storeKey will store the result under this alias
+ * @param null|string $onlyIf will only run computation if the matching
+ * store key is true
+ * @param null|string $onlyIfNot will only run computation if the matching
+ * store key is false
+ */
+ public function push(
+ $type,
+ $value,
+ $reference = null,
+ $storeKey = null,
+ $onlyIf = null,
+ $onlyIfNot = null
+ ): void {
+ $stackItem = $this->getStackItem($type, $value, $reference, $storeKey, $onlyIf, $onlyIfNot);
+
+ $this->stack[$this->count++] = $stackItem;
+
+ if ($type == 'Function') {
+ $localeFunction = Calculation::localeFunc($value);
+ if ($localeFunction != $value) {
+ $this->stack[($this->count - 1)]['localeValue'] = $localeFunction;
+ }
+ }
+ }
+
+ public function getStackItem(
+ $type,
+ $value,
+ $reference = null,
+ $storeKey = null,
+ $onlyIf = null,
+ $onlyIfNot = null
+ ) {
+ $stackItem = [
+ 'type' => $type,
+ 'value' => $value,
+ 'reference' => $reference,
+ ];
+
+ if (isset($storeKey)) {
+ $stackItem['storeKey'] = $storeKey;
+ }
+
+ if (isset($onlyIf)) {
+ $stackItem['onlyIf'] = $onlyIf;
+ }
+
+ if (isset($onlyIfNot)) {
+ $stackItem['onlyIfNot'] = $onlyIfNot;
+ }
+
+ return $stackItem;
+ }
+
+ /**
+ * Pop the last entry from the stack.
+ *
+ * @return mixed
+ */
+ public function pop()
+ {
+ if ($this->count > 0) {
+ return $this->stack[--$this->count];
+ }
+
+ return null;
+ }
+
+ /**
+ * Return an entry from the stack without removing it.
+ *
+ * @param int $n number indicating how far back in the stack we want to look
+ *
+ * @return mixed
+ */
+ public function last($n = 1)
+ {
+ if ($this->count - $n < 0) {
+ return null;
+ }
+
+ return $this->stack[$this->count - $n];
+ }
+
+ /**
+ * Clear the stack.
+ */
+ public function clear(): void
+ {
+ $this->stack = [];
+ $this->count = 0;
+ }
+
+ public function __toString()
+ {
+ $str = 'Stack: ';
+ foreach ($this->stack as $index => $item) {
+ if ($index > $this->count - 1) {
+ break;
+ }
+ $value = $item['value'] ?? 'no value';
+ while (is_array($value)) {
+ $value = array_pop($value);
+ }
+ $str .= $value . ' |> ';
+ }
+
+ return $str;
+ }
+}