//================================================================ /** * @packageDocumentation * @module std.ranges */ //================================================================ import { IForwardIterator } from "../../iterator/IForwardIterator"; import { IPointer } from "../../functional/IPointer"; import { ISize } from "../../internal/container/partial/ISize"; import { Vector } from "../../container/Vector"; /** * Forward iterable container. * * @template Iterator Iterator type * @author Jeongho Nam - https://github.com/samchon */ export interface IForwardContainer< Iterator extends IForwardIterator, Iterator>, > extends ISize { /** * Iterator to the first element. * * @return Iterator to the first element. */ begin(): Iterator; /** * Iterator to the end. * * @return Iterator to the end. */ end(): Iterator; } export namespace IForwardContainer { /** * Deduct iterator type. */ export type IteratorType< Container extends Array | IForwardContainer, > = Container extends Array ? Vector.Iterator : Container extends IForwardContainer ? Iterator : unknown; /** * Deduct value type. */ export type ValueType< Container extends Array | IForwardContainer, > = IPointer.ValueType>; /** * Deduct similar type. */ export type SimilarType< Container extends Array | IForwardContainer, > = | Array> | IForwardContainer, any>>; }