| 3079 | type HashBuckets = Map<number, Array<unknown>> |
| 3080 | |
| 3081 | const hashBucketsAdd = (buckets: HashBuckets, value: unknown): boolean => { |
| 3082 | const hash = Hash.hash(value) |
| 3083 | const bucket = buckets.get(hash) |
| 3084 | if (bucket === undefined) { |
| 3085 | buckets.set(hash, [value]) |
| 3086 | return true |
| 3087 | } |
| 3088 | // Hash collisions still require an Effect equality check. |
| 3089 | for (const previous of bucket) { |
| 3090 | if (Equal.equals(previous, value)) { |
| 3091 | return false |
| 3092 | } |
| 3093 | } |
| 3094 | bucket.push(value) |
| 3095 | return true |
| 3096 | } |
| 3097 | |
| 3098 | const makeHashBuckets = (values: Iterable<unknown>): HashBuckets => { |
| 3099 | const buckets: HashBuckets = new Map() |