//================================================================ /** * @packageDocumentation * @module std */ //================================================================ import { InsertIteratorBase } from "../internal/iterator/InsertIteratorBase"; import { IForwardIterator } from "./IForwardIterator"; import { IPointer } from "../functional/IPointer"; import { IInsert } from "../internal/container/partial/IInsert"; import { equal_to } from "../functional/comparators"; /** * Insert iterator. * * @author Jeongho Nam - https://github.com/samchon */ export class InsertIterator< Container extends IInsert, Iterator extends IForwardIterator, Iterator>, > extends InsertIteratorBase< IPointer.ValueType, InsertIterator > { private container_: Container; private it_: Iterator; /* --------------------------------------------------------- METHODS --------------------------------------------------------- */ /** * Initializer Constructor. * * @param container Target container to insert. * @param it Iterator to the position to insert. */ public constructor(container: Container, it: Iterator) { super(); this.container_ = container; this.it_ = it; } /** * @inheritDoc */ public set value(val: IPointer.ValueType) { this.it_ = this.container_.insert(this.it_, val); this.it_ = this.it_.next() as Iterator; } /** * @inheritDoc */ public equals(obj: InsertIterator): boolean { return equal_to(this.it_, obj.it_); } }