+- `CelerityDictionary.GetEnumerator()`, `CelerityDictionary.Keys`, and `CelerityDictionary.Values` — struct-based, allocation-free enumeration over a `CelerityDictionary<TKey, TValue, THasher>`, mirroring the `IntDictionary` surface added earlier in 1.1.0. `Keys` and `Values` expose `KeyCollection` / `ValueCollection` readonly structs, each with their own struct enumerator, so `foreach (var kvp in map)` / `foreach (var k in map.Keys)` / `foreach (var v in map.Values)` do not box. The out-of-band default-key entry is yielded first — including `null` for reference-type keys. The enumerators track a `_version` counter and throw `InvalidOperationException` on `MoveNext` / `Reset` if the dictionary is mutated mid-enumeration, matching BCL `Dictionary<,>` semantics. Completes issue #10 and unblocks `IReadOnlyDictionary<TKey, TValue>` (#9).
0 commit comments