"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cast_de_nrw_schule_svws_core_adt_tree_MinHeapIterator = exports.MinHeapIterator = void 0;
const JavaObject_1 = require("../../../java/lang/JavaObject");
const ConcurrentModificationException_1 = require("../../../java/util/ConcurrentModificationException");
const NoSuchElementException_1 = require("../../../java/util/NoSuchElementException");
const UnsupportedOperationException_1 = require("../../../java/lang/UnsupportedOperationException");
class MinHeapIterator extends JavaObject_1.JavaObject {
    _elements;
    _current = 0;
    _heap;
    _expModCount;
    /**
     * Erstellt einen neuen Iterator für die Klasse MinHeap
     *
     * @param elem   die Elemente des Minimum Heaps
     * @param heap   eine Referenz zum Minimum Heap, um auf parallel erfolgende modifizierende Zugriffe reagierenzu können.
     */
    constructor(elem, heap) {
        super();
        this._current = -1;
        this._elements = elem;
        this._heap = heap;
        this._expModCount = heap.getModCount();
    }
    hasNext() {
        if (this._heap.getModCount() !== this._expModCount)
            throw new ConcurrentModificationException_1.ConcurrentModificationException();
        return ((this._current + 1) < this._heap.size());
    }
    next() {
        if (!this.hasNext())
            throw new NoSuchElementException_1.NoSuchElementException("Keine weiteren Elemente vorhanden. Eine Prüfung mit hasNext() vorab ist empfehlenswert.");
        let elem = this._elements[++this._current];
        if (elem === null)
            throw new NoSuchElementException_1.NoSuchElementException("Interner Fehler in der Datenstruktur.");
        return elem;
    }
    remove() {
        throw new UnsupportedOperationException_1.UnsupportedOperationException("remove");
    }
    isTranspiledInstanceOf(name) {
        return ['java.util.Iterator', 'de.nrw.schule.svws.core.adt.tree.MinHeapIterator'].includes(name);
    }
}
exports.MinHeapIterator = MinHeapIterator;
function cast_de_nrw_schule_svws_core_adt_tree_MinHeapIterator(obj) {
    return obj;
}
exports.cast_de_nrw_schule_svws_core_adt_tree_MinHeapIterator = cast_de_nrw_schule_svws_core_adt_tree_MinHeapIterator;
//# sourceMappingURL=MinHeapIterator.js.map