MinHeapIterator.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { JavaObject, cast_java_lang_Object } from '../../../java/lang/JavaObject';
  2. import { ConcurrentModificationException, cast_java_util_ConcurrentModificationException } from '../../../java/util/ConcurrentModificationException';
  3. import { MinHeap, cast_de_nrw_schule_svws_core_adt_tree_MinHeap } from '../../../core/adt/tree/MinHeap';
  4. import { JavaIterator, cast_java_util_Iterator } from '../../../java/util/JavaIterator';
  5. import { NoSuchElementException, cast_java_util_NoSuchElementException } from '../../../java/util/NoSuchElementException';
  6. import { UnsupportedOperationException, cast_java_lang_UnsupportedOperationException } from '../../../java/lang/UnsupportedOperationException';
  7. export class MinHeapIterator<T> extends JavaObject implements JavaIterator<T> {
  8. private readonly _elements : Array<T | null>;
  9. private _current : number = 0;
  10. private readonly _heap : MinHeap<T>;
  11. private readonly _expModCount : number;
  12. /**
  13. * Erstellt einen neuen Iterator für die Klasse MinHeap
  14. *
  15. * @param elem die Elemente des Minimum Heaps
  16. * @param heap eine Referenz zum Minimum Heap, um auf parallel erfolgende modifizierende Zugriffe reagierenzu können.
  17. */
  18. constructor(elem : Array<T | null>, heap : MinHeap<T>) {
  19. super();
  20. this._current = -1;
  21. this._elements = elem;
  22. this._heap = heap;
  23. this._expModCount = heap.getModCount();
  24. }
  25. public hasNext() : boolean {
  26. if (this._heap.getModCount() !== this._expModCount)
  27. throw new ConcurrentModificationException()
  28. return ((this._current + 1) < this._heap.size());
  29. }
  30. public next() : T {
  31. if (!this.hasNext())
  32. throw new NoSuchElementException("Keine weiteren Elemente vorhanden. Eine Prüfung mit hasNext() vorab ist empfehlenswert.")
  33. let elem : T | null = this._elements[++this._current];
  34. if (elem === null)
  35. throw new NoSuchElementException("Interner Fehler in der Datenstruktur.")
  36. return elem;
  37. }
  38. public remove() : void {
  39. throw new UnsupportedOperationException("remove")
  40. }
  41. isTranspiledInstanceOf(name : string): boolean {
  42. return ['java.util.Iterator', 'de.nrw.schule.svws.core.adt.tree.MinHeapIterator'].includes(name);
  43. }
  44. }
  45. export function cast_de_nrw_schule_svws_core_adt_tree_MinHeapIterator<T>(obj : unknown) : MinHeapIterator<T> {
  46. return obj as MinHeapIterator<T>;
  47. }