summaryrefslogtreecommitdiff
path: root/vendor/sebastian/recursion-context/src/Context.php
diff options
context:
space:
mode:
authorsupahgreg <supahgreg@users.noreply.github.com>2025-10-09 02:49:56 +0000
committersupahgreg <supahgreg@users.noreply.github.com>2025-10-09 03:08:30 +0000
commite41d6361221a30ca9d996cde7591111e626b7e1c (patch)
tree4572f61f37bbc76192ad60e0940c281483bc03af /vendor/sebastian/recursion-context/src/Context.php
parentab0aabf8548c206f3f624de5451a9b6abbde90be (diff)
Remove dev dependencies and update the rest.
Diffstat (limited to 'vendor/sebastian/recursion-context/src/Context.php')
-rw-r--r--vendor/sebastian/recursion-context/src/Context.php186
1 files changed, 0 insertions, 186 deletions
diff --git a/vendor/sebastian/recursion-context/src/Context.php b/vendor/sebastian/recursion-context/src/Context.php
deleted file mode 100644
index 87fe7b04f..000000000
--- a/vendor/sebastian/recursion-context/src/Context.php
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php declare(strict_types=1);
-/*
- * This file is part of the Recursion Context package.
- *
- * (c) Sebastian Bergmann <sebastian@phpunit.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-namespace SebastianBergmann\RecursionContext;
-
-use const PHP_INT_MAX;
-use const PHP_INT_MIN;
-use function array_pop;
-use function array_slice;
-use function count;
-use function is_array;
-use function is_object;
-use function random_int;
-use function spl_object_hash;
-use SplObjectStorage;
-
-/**
- * A context containing previously processed arrays and objects
- * when recursively processing a value.
- */
-final class Context
-{
- /**
- * @var array[]
- */
- private $arrays;
-
- /**
- * @var SplObjectStorage
- */
- private $objects;
-
- /**
- * Initialises the context.
- */
- public function __construct()
- {
- $this->arrays = [];
- $this->objects = new SplObjectStorage;
- }
-
- /**
- * @codeCoverageIgnore
- */
- public function __destruct()
- {
- foreach ($this->arrays as &$array) {
- if (is_array($array)) {
- array_pop($array);
- array_pop($array);
- }
- }
- }
-
- /**
- * Adds a value to the context.
- *
- * @param array|object $value the value to add
- *
- * @throws InvalidArgumentException Thrown if $value is not an array or object
- *
- * @return bool|int|string the ID of the stored value, either as a string or integer
- *
- * @psalm-template T
- * @psalm-param T $value
- * @param-out T $value
- */
- public function add(&$value)
- {
- if (is_array($value)) {
- return $this->addArray($value);
- }
-
- if (is_object($value)) {
- return $this->addObject($value);
- }
-
- throw new InvalidArgumentException(
- 'Only arrays and objects are supported'
- );
- }
-
- /**
- * Checks if the given value exists within the context.
- *
- * @param array|object $value the value to check
- *
- * @throws InvalidArgumentException Thrown if $value is not an array or object
- *
- * @return false|int|string the string or integer ID of the stored value if it has already been seen, or false if the value is not stored
- *
- * @psalm-template T
- * @psalm-param T $value
- * @param-out T $value
- */
- public function contains(&$value)
- {
- if (is_array($value)) {
- return $this->containsArray($value);
- }
-
- if (is_object($value)) {
- return $this->containsObject($value);
- }
-
- throw new InvalidArgumentException(
- 'Only arrays and objects are supported'
- );
- }
-
- /**
- * @return bool|int
- */
- private function addArray(array &$array)
- {
- $key = $this->containsArray($array);
-
- if ($key !== false) {
- return $key;
- }
-
- $key = count($this->arrays);
- $this->arrays[] = &$array;
-
- if (!isset($array[PHP_INT_MAX]) && !isset($array[PHP_INT_MAX - 1])) {
- $array[] = $key;
- $array[] = $this->objects;
- } else { /* cover the improbable case too */
- do {
- $key = random_int(PHP_INT_MIN, PHP_INT_MAX);
- } while (isset($array[$key]));
-
- $array[$key] = $key;
-
- do {
- $key = random_int(PHP_INT_MIN, PHP_INT_MAX);
- } while (isset($array[$key]));
-
- $array[$key] = $this->objects;
- }
-
- return $key;
- }
-
- /**
- * @param object $object
- */
- private function addObject($object): string
- {
- if (!$this->objects->contains($object)) {
- $this->objects->attach($object);
- }
-
- return spl_object_hash($object);
- }
-
- /**
- * @return false|int
- */
- private function containsArray(array &$array)
- {
- $end = array_slice($array, -2);
-
- return isset($end[1]) && $end[1] === $this->objects ? $end[0] : false;
- }
-
- /**
- * @param object $value
- *
- * @return false|string
- */
- private function containsObject($value)
- {
- if ($this->objects->contains($value)) {
- return spl_object_hash($value);
- }
-
- return false;
- }
-}