From 22cc1b439f78c5bb1d985fdb09992dee7689c464 Mon Sep 17 00:00:00 2001 From: Julien Rosset Date: Tue, 18 Jul 2023 13:39:19 +0200 Subject: [PATCH] Add unique collections --- src/Collections/TUniqueValues.php | 36 +++++++++++++++++++ src/Collections/UniqueCollection.php | 15 ++++++++ src/Collections/UniqueImmutableCollection.php | 15 ++++++++ 3 files changed, 66 insertions(+) create mode 100644 src/Collections/TUniqueValues.php create mode 100644 src/Collections/UniqueCollection.php create mode 100644 src/Collections/UniqueImmutableCollection.php diff --git a/src/Collections/TUniqueValues.php b/src/Collections/TUniqueValues.php new file mode 100644 index 0000000..622ecff --- /dev/null +++ b/src/Collections/TUniqueValues.php @@ -0,0 +1,36 @@ + + */ +trait TUniqueValues { + /** + * @inheritDoc + */ + protected function _set (int|string $key, mixed $value): self { + if ($this->contains($value)) { + return $this; + } + + $this->elements[$this->_normalizeKey($key)] = $value; + return $this; + } + /** + * @inheritDoc + */ + protected function _add (mixed ...$values): self { + foreach ($values as $value) { + if ($this->contains($value)) { + continue; + } + $this->elements[] = $value; + } + return $this; + } +} \ No newline at end of file diff --git a/src/Collections/UniqueCollection.php b/src/Collections/UniqueCollection.php new file mode 100644 index 0000000..905f7b4 --- /dev/null +++ b/src/Collections/UniqueCollection.php @@ -0,0 +1,15 @@ + + * @template-extends TUniqueValues + */ +class UniqueCollection extends Collection { + use TUniqueValues; +} \ No newline at end of file diff --git a/src/Collections/UniqueImmutableCollection.php b/src/Collections/UniqueImmutableCollection.php new file mode 100644 index 0000000..6ce640d --- /dev/null +++ b/src/Collections/UniqueImmutableCollection.php @@ -0,0 +1,15 @@ + + * @template-extends TUniqueValues + */ +class UniqueImmutableCollection extends ImmutableCollection { + use TUniqueValues; +} \ No newline at end of file