Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion phpcs.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@
<rule ref="SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly">
<properties>
<property name="searchAnnotations" value="true"/>
<property name="allowFallbackGlobalFunctions" value="true"/>
<property name="allowFallbackGlobalFunctions" value="false"/>
<property name="allowFallbackGlobalConstants" value="true"/>
<property name="allowFullyQualifiedNameForCollidingClasses" value="true"/>
</properties>
Expand Down
6 changes: 6 additions & 0 deletions src/CollectionLogic.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@
use Noctud\Collection\Store\ReadOnlyElementStore;
use Traversable;
use NoDiscard;
use function sort;
use function rsort;
use function array_values;
use function usort;
use function array_reverse;
use function shuffle;

/**
* @phpstan-type PhpStormBugBypass array{0:NK,1:NV}
Expand Down
3 changes: 3 additions & 0 deletions src/Exception/InvalidSequenceSourceException.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

namespace Noctud\Collection\Exception;

use function sprintf;
use function get_debug_type;

/**
* Thrown when a sequence source closure returns a non-iterable value.
*/
Expand Down
1 change: 1 addition & 0 deletions src/Exception/NoSuchElementException.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use LogicException;
use Noctud\Collection\Collection;
use Noctud\Collection\Sequence\Sequence;
use function sprintf;

final class NoSuchElementException extends LogicException implements NoctudCollectionException
{
Expand Down
2 changes: 2 additions & 0 deletions src/Exception/UnsupportedOperationException.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
use LogicException;
use Noctud\Collection\Collection;
use Noctud\Collection\Sequence\Sequence;
use function sprintf;
use function lcfirst;

/**
* Thrown when a mutating method is called on an immutable collection/map or when a
Expand Down
3 changes: 3 additions & 0 deletions src/IterableTerminalsLogic.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
use Noctud\Collection\Exception\NoSuchElementException;
use Noctud\Collection\Exception\UnsupportedOperationException;
use Stringable;
use function is_scalar;
use function sprintf;
use function get_debug_type;

/**
* Terminal operations implemented by walking the elements and nothing else, shared by the eager
Expand Down
14 changes: 14 additions & 0 deletions src/KeyHasher.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,20 @@
namespace Noctud\Collection;

use Noctud\Collection\Exception\InvalidKeyTypeException;
use function is_int;
use function is_string;
use function is_null;
use function is_bool;
use function is_float;
use function sprintf;
use function is_object;
use function spl_object_id;
use function is_array;
use function hash;
use function serialize;
use function is_resource;
use function get_resource_id;
use function get_debug_type;

/**
* @internal
Expand Down
11 changes: 11 additions & 0 deletions src/List/ArrayList/ArrayIndexStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,17 @@
use Noctud\Collection\Store\AbstractElementStore;
use Noctud\Collection\Store\ReadWriteIndexedStore;
use Traversable;
use function is_array;
use function array_is_list;
use function array_values;
use function array_push;
use function array_unshift;
use function array_key_exists;
use function array_search;
use function count;
use function array_splice;
use function array_keys;
use function in_array;

/**
* Internal storage for ArrayList.
Expand Down
5 changes: 5 additions & 0 deletions src/List/ListLogic.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@
use NoDiscard;
use function Noctud\Collection\intMapOf;
use function Noctud\Collection\listOf;
use function count;
use function max;
use function array_slice;
use function is_int;
use function shuffle;

/**
* Shared logic for all List implementations.
Expand Down
18 changes: 18 additions & 0 deletions src/Map/HashMap/HashKeyValueStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,24 @@
use Noctud\Collection\Operation\SortOperation;
use Noctud\Collection\Store\KeyValueStore;
use Traversable;
use function count;
use function array_key_exists;
use function in_array;
use function array_key_first;
use function array_key_last;
use function array_rand;
use function usort;
use function array_replace;
use function array_slice;
use function array_reverse;
use function array_keys;
use function shuffle;
use function array_values;
use function is_scalar;
use function is_float;
use function sprintf;
use function is_bool;
use function get_debug_type;

/**
* Internal dual-array entry storage for maps with normalized keys.
Expand Down
1 change: 1 addition & 0 deletions src/Map/IntMap/ImmutableIntMap.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
use function Noctud\Collection\intMapOf;
use function Noctud\Collection\mapOf;
use function Noctud\Collection\mutableIntMapOf;
use function iterator_to_array;

/**
* Immutable int-key map with optimized single-array storage.
Expand Down
27 changes: 25 additions & 2 deletions src/Map/IntMap/IntKeyValueStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,25 @@
use Noctud\Collection\Operation\SortOperation;
use Noctud\Collection\Store\KeyValueStore;
use Traversable;
use function is_array;
use function array_is_list;
use function array_all;
use function is_int;
use function sprintf;
use function get_debug_type;
use function count;
use function array_key_exists;
use function in_array;
use function array_key_first;
use function array_key_last;
use function array_rand;
use function usort;
use function array_replace;
use function array_slice;
use function array_reverse;
use function array_keys;
use function shuffle;
use function array_values;

/**
* Internal single-array entry storage for int-key maps.
Expand Down Expand Up @@ -146,8 +165,10 @@ public function first(bool $throw = false): ?SimpleMapEntry
throw new NoSuchElementException();
}

// Non-empty (checked above), so the key is never null.
/** @var int $key */
$key = array_key_first($this->data);
assert($key !== null);

return new SimpleMapEntry($key, $this->data[$key]);
}

Expand All @@ -165,8 +186,10 @@ public function last(bool $throw = false): ?SimpleMapEntry
throw new NoSuchElementException();
}

// Non-empty (checked above), so the key is never null.
/** @var int $key */
$key = array_key_last($this->data);
assert($key !== null);

return new SimpleMapEntry($key, $this->data[$key]);
}

Expand Down
3 changes: 3 additions & 0 deletions src/Map/MapLogic.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
use function Noctud\Collection\listOf;
use function Noctud\Collection\mapOf;
use function Noctud\Collection\mutableMapOf;
use function max;
use function count;
use function array_slice;

/**
* Shared logic for all Map implementations.
Expand Down
1 change: 1 addition & 0 deletions src/Map/StringMap/ImmutableStringMap.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
use function Noctud\Collection\mapOf;
use function Noctud\Collection\mutableStringMapOf;
use function Noctud\Collection\stringMapOf;
use function iterator_to_array;

/**
* Immutable string-key map with optimized single-array storage.
Expand Down
19 changes: 19 additions & 0 deletions src/Map/StringMap/StringKeyValueStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,25 @@
use Noctud\Collection\Operation\SortOperation;
use Noctud\Collection\Store\KeyValueStore;
use Traversable;
use function is_array;
use function count;
use function is_string;
use function array_key_exists;
use function in_array;
use function array_key_first;
use function array_key_last;
use function array_rand;
use function sprintf;
use function get_debug_type;
use function usort;
use function array_replace;
use function array_slice;
use function array_reverse;
use function array_keys;
use function shuffle;
use function array_map;
use function strval;
use function array_values;

/**
* Internal single-array entry storage for string-key maps.
Expand Down
1 change: 1 addition & 0 deletions src/Map/View/MapEntryStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Noctud\Collection\Store\ReadOnlyElementStore;
use Noctud\Collection\Store\KeyValueStore;
use Traversable;
use function iterator_to_array;

/**
* @template K of string|int|bool|float|object
Expand Down
3 changes: 3 additions & 0 deletions src/Operation/ChunkOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
namespace Noctud\Collection\Operation;

use Generator;
use function is_array;
use function array_chunk;
use function count;

/**
* @internal
Expand Down
1 change: 1 addition & 0 deletions src/Operation/DistinctOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

use Generator;
use Noctud\Collection\KeyHasher;
use function array_key_exists;

/**
* @internal
Expand Down
6 changes: 6 additions & 0 deletions src/Operation/DropOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
namespace Noctud\Collection\Operation;

use Generator;
use function is_array;
use function array_slice;
use function max;
use function array_values;
use function iterator_to_array;
use function count;

/**
* @internal
Expand Down
1 change: 1 addition & 0 deletions src/Operation/FlattenOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
namespace Noctud\Collection\Operation;

use Generator;
use function is_iterable;

/**
* @internal
Expand Down
3 changes: 3 additions & 0 deletions src/Operation/FlipKeyValueOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
use Noctud\Collection\KeyHasher;
use Noctud\Collection\Map\HashMap\HashKeyValueStore;
use Noctud\Collection\Map\KeyCollisionStrategy;
use function sprintf;
use function is_scalar;
use function get_debug_type;

/**
* @internal
Expand Down
3 changes: 3 additions & 0 deletions src/Operation/SetOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
use Noctud\Collection\Set\HashSet\HashElementStore;
use Noctud\Collection\Set\HashSet\ImmutableHashSet;
use Noctud\Collection\Set\HashSet\MutableHashSet;
use function array_intersect_key;
use function array_diff_key;
use function array_key_exists;

/**
* Set algebra on arrays keyed by KeyHasher::hashSetKey(): PHP intersects, subtracts and merges
Expand Down
2 changes: 2 additions & 0 deletions src/Operation/SortOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

namespace Noctud\Collection\Operation;

use function uasort;

/**
* @internal
*/
Expand Down
5 changes: 5 additions & 0 deletions src/Operation/TakeOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@
namespace Noctud\Collection\Operation;

use Generator;
use function is_array;
use function array_slice;
use function array_values;
use function iterator_to_array;
use function count;

/**
* @internal
Expand Down
2 changes: 2 additions & 0 deletions src/Operation/UnzipOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
namespace Noctud\Collection\Operation;

use Noctud\Collection\Exception\UnsupportedOperationException;
use function is_array;
use function array_key_exists;

/**
* @internal
Expand Down
4 changes: 4 additions & 0 deletions src/Operation/WindowOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
namespace Noctud\Collection\Operation;

use Generator;
use function is_array;
use function count;
use function min;
use function array_slice;

/**
* @internal
Expand Down
1 change: 1 addition & 0 deletions src/Operation/ZipOperation.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use Noctud\Collection\Exception\NonReplayableSourceException;
use NoRewindIterator;
use Throwable;
use function is_array;

/**
* @internal
Expand Down
6 changes: 6 additions & 0 deletions src/Sequence/SequenceLogic.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@
use function Noctud\Collection\listOf;
use function Noctud\Collection\mapOf;
use function Noctud\Collection\setOf;
use function count;
use function in_array;
use function array_keys;
use function iterator_to_array;
use function is_array;
use function is_iterable;

/**
* @template E
Expand Down
8 changes: 8 additions & 0 deletions src/Set/HashSet/HashElementStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@
use Noctud\Collection\Store\AbstractElementStore;
use Noctud\Collection\Store\ReadWriteElementStore;
use Traversable;
use function array_key_exists;
use function array_key_first;
use function uasort;
use function asort;
use function array_reverse;
use function array_keys;
use function shuffle;
use function array_values;

/**
* Internal storage for HashSet.
Expand Down
6 changes: 6 additions & 0 deletions src/Set/SetLogic.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
use NoDiscard;
use function Noctud\Collection\mutableSetOf;
use function Noctud\Collection\setOf;
use function sort;
use function rsort;
use function array_values;
use function usort;
use function array_reverse;
use function shuffle;

/**
* Shared logic for all Set implementations.
Expand Down
Loading
Loading