//================================================================ /** * @packageDocumentation * @module std.base */ //================================================================ import { SetContainer } from "./SetContainer"; import { IHashContainer } from "../../internal/container/associative/IHashContainer"; import { SetElementList } from "../../internal/container/associative/SetElementList"; /** * Common interface for hash sets. * * @template Key Key type * @template Unique Whether duplicated key is blocked or not * @template Source Derived type extending this {@link IHashSet} * * @author Jeongho Nam - https://github.com/samchon */ export interface IHashSet< Key, Unique extends boolean, Source extends IHashSet, > extends SetContainer< Key, Unique, Source, IHashSet.Iterator, IHashSet.ReverseIterator >, IHashContainer< Key, Key, Source, IHashSet.Iterator, IHashSet.ReverseIterator, Key > { /* --------------------------------------------------------- ITERATORS --------------------------------------------------------- */ /** * @inheritDoc */ begin(): IHashSet.Iterator; /** * Iterator to the first element in a specific bucket. * * @param index Index number of the specific bucket. * @return Iterator from the specific bucket. */ begin(index: number): IHashSet.Iterator; /** * @inheritDoc */ end(): IHashSet.Iterator; /** * Iterator to the end in a specific bucket. * * @param index Index number of the specific bucket. * @return Iterator from the specific bucket. */ end(index: number): IHashSet.Iterator; } export namespace IHashSet { /** * Iterator of {@link IHashSet} * * @author Jenogho Nam */ export type Iterator< Key, Unique extends boolean, Source extends IHashSet, > = SetElementList.Iterator; /** * Reverse iterator of {@link IHashSet} * * @author Jenogho Nam */ export type ReverseIterator< Key, Unique extends boolean, Source extends IHashSet, > = SetElementList.ReverseIterator; }