From 6b5f36d91fd4f545073ae4f90e9e085a02e8029d Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Wed, 27 Jun 2018 16:18:43 +0200
Subject: [PATCH]  #45 ajout interface NumberIterator

---
 spec/iterator/paramvalues_iterator.spec.ts |  4 ++--
 src/nub.ts                                 |  2 +-
 src/param/param-base.ts                    |  6 +++---
 src/param/param-value-iterator.ts          | 19 +++++++++++++++++--
 src/param/param-values.ts                  |  6 +++---
 src/util/result.ts                         | 10 +++++-----
 src/value_ref/object_ref.ts                |  6 +++---
 7 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/spec/iterator/paramvalues_iterator.spec.ts b/spec/iterator/paramvalues_iterator.spec.ts
index 9bfa898d..672cb134 100644
--- a/spec/iterator/paramvalues_iterator.spec.ts
+++ b/spec/iterator/paramvalues_iterator.spec.ts
@@ -1,8 +1,8 @@
 import { ParamValues } from "../../src/param/param-values"
-import { ParamValueIterator } from "../../src/param/param-value-iterator";
+import { NumberIterator } from "../../src/param/param-value-iterator";
 import { ParamValueMode } from "../../src/param/param-value-mode";
 
-function checkNumberList(it: ParamValueIterator, exp: number[]) {
+function checkNumberList(it: NumberIterator, exp: number[]) {
     let n = 0;
     for (const v of it) {
         expect(v).toEqual(exp[n]);
diff --git a/src/nub.ts b/src/nub.ts
index 76c66022..d5f0bb78 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -207,7 +207,7 @@ export abstract class Nub extends ComputeNode implements IReferencedNub {
         return r.getExtraResult(tmp[1]);
     }
 
-    public getReferencedValuesIterator(desc: string): IterableIterator<number> {
+    public getReferencedValuesIterator(desc: string): NumberIterator {
         const tmp = desc.split(".");
 
         if (tmp.length > 1 && tmp[1] === "")
diff --git a/src/param/param-base.ts b/src/param/param-base.ts
index 7c40e9dd..394d4446 100644
--- a/src/param/param-base.ts
+++ b/src/param/param-base.ts
@@ -7,7 +7,7 @@ import { ParamValues } from "./param-values";
 import { ParamValueMode } from "./param-value-mode";
 import { IReferencedNub, INubReference } from "../value_ref/object_ref";
 import { Result } from "../util/result";
-import { NamedIterableValues } from "./param-value-iterator";
+import { NamedIterableValues, NumberIterator } from "./param-value-iterator";
 import { IObservable, Observable, Observer } from "../util/observer";
 
 /**
@@ -338,7 +338,7 @@ export class BaseParam extends JalhydObject implements INubReference, NamedItera
         return this._paramValues.referencedExtraResult;
     }
 
-    public get referencedValuesIterator(): IterableIterator<number> {
+    public get referencedValuesIterator(): NumberIterator {
         return this._paramValues.referencedValuesIterator;
     }
 
@@ -348,7 +348,7 @@ export class BaseParam extends JalhydObject implements INubReference, NamedItera
 
     // interface NamedIterableValues
 
-    public get valuesIterator(): IterableIterator<number> {
+    public get valuesIterator(): NumberIterator {
         if (this.isReferenceDefined)
             return this.referencedValuesIterator;
         return this._paramValues.valuesIterator;
diff --git a/src/param/param-value-iterator.ts b/src/param/param-value-iterator.ts
index b94e3095..c5f05fcb 100644
--- a/src/param/param-value-iterator.ts
+++ b/src/param/param-value-iterator.ts
@@ -2,6 +2,21 @@ import { ParamValues } from "./param-values";
 import { ParamValueMode } from "./param-value-mode";
 import { INamedObject } from "../jalhyd_object";
 
+/**
+ * itérateur sur des nombres
+ */
+export interface NumberIterator extends IterableIterator<number> {
+    /**
+     * @return true si il reste des valeurs à parcourir
+     */
+    readonly hasNext: boolean;
+
+    /**
+     * prochaine valeur
+     */
+    next(): IteratorResult<number>;
+}
+
 /**
  * interface implémentée par les objets pouvant renvoyer un itérateur sur une série de valeurs numériques
  */
@@ -9,7 +24,7 @@ export interface IterableValues {
     /**
      * itérateur sur les valeurs
      */
-    readonly valuesIterator: IterableIterator<number>;
+    readonly valuesIterator: NumberIterator;
 
     /**
      * true si la série de valeurs a plus d'une valeur
@@ -26,7 +41,7 @@ export interface NamedIterableValues extends INamedObject, IterableValues {
 /**
  * itérateur sur les (ou la) valeurs prises par un ParamValues
  */
-export class ParamValueIterator implements IterableIterator<number> {
+export class ParamValueIterator implements NumberIterator {
     /**
      * paramètre à itérer
      */
diff --git a/src/param/param-values.ts b/src/param/param-values.ts
index 345206b6..6f424e88 100644
--- a/src/param/param-values.ts
+++ b/src/param/param-values.ts
@@ -44,7 +44,7 @@ export class ParamValues implements INubReference, IterableValues {
     /**
      * itérateur courant
      */
-    private _iterator: ParamValueIterator;
+    private _iterator: NumberIterator;
 
     /**
      * implémentation par délégation de INubReference
@@ -237,7 +237,7 @@ export class ParamValues implements INubReference, IterableValues {
      * crée un ParamValueIterator
      * @param reverse true si on veut itérer max->min ou depuis la fin de la liste
      */
-    public getValuesIterator(reverse: boolean = false): ParamValueIterator {
+    public getValuesIterator(reverse: boolean = false): NumberIterator {
         return new ParamValueIterator(this, reverse);
     }
 
@@ -324,7 +324,7 @@ export class ParamValues implements INubReference, IterableValues {
 
     // interface IterableValues
 
-    public get valuesIterator(): IterableIterator<number> {
+    public get valuesIterator(): NumberIterator {
         return this.getValuesIterator();
     }
 
diff --git a/src/util/result.ts b/src/util/result.ts
index 5fce9449..6c4ac03d 100644
--- a/src/util/result.ts
+++ b/src/util/result.ts
@@ -2,7 +2,7 @@ import { cLog } from "./log";
 import { Message, MessageCode, MessageSeverity } from "./message";
 import { ResultElement } from "./resultelement";
 import { JalhydObject } from "../jalhyd_object";
-import { NamedIterableValues } from "../param/param-value-iterator";
+import { NamedIterableValues, NumberIterator } from "../param/param-value-iterator";
 
 /**
  * Résultat global d'un calcul
@@ -266,11 +266,11 @@ export class Result extends JalhydObject implements NamedIterableValues {
         return this._name;
     }
 
-    public get valuesIterator(): IterableIterator<number> {
+    public get valuesIterator(): NumberIterator {
         const tmp: number[] = [];
         for (const re of this._resultElements)
             tmp.push(re.vCalc);
-        return tmp[Symbol.iterator]();
+        return tmp[Symbol.iterator]() as NumberIterator;
     }
 
     public get hasMultipleValues(): boolean {
@@ -318,8 +318,8 @@ export class ExtraResults extends JalhydObject implements NamedIterableValues {
 
     // interface NamedIterableValues
 
-    public get valuesIterator(): IterableIterator<number> {
-        return this._values[Symbol.iterator]();
+    public get valuesIterator(): NumberIterator {
+        return this._values[Symbol.iterator]() as NumberIterator;
     }
 
     public get hasMultipleValues(): boolean {
diff --git a/src/value_ref/object_ref.ts b/src/value_ref/object_ref.ts
index 2eb60396..0db46b1d 100644
--- a/src/value_ref/object_ref.ts
+++ b/src/value_ref/object_ref.ts
@@ -29,7 +29,7 @@ export interface IReferencedNub {
     /**
      * itérateur sur les valeurs
      */
-    getReferencedValuesIterator(desc: string): IterableIterator<number>;
+    getReferencedValuesIterator(desc: string): NumberIterator;
 
     /**
      * objet (paramètre/résultat/résultat complémentaire) référencé
@@ -81,7 +81,7 @@ export interface INubReference {
     /**
      * itérateur sur les valeurs référencées
      */
-    readonly referencedValuesIterator: IterableIterator<number>;
+    readonly referencedValuesIterator: NumberIterator;
 
     /**
      * objet (paramètre/résultat/résultat complémentaire) référencé
@@ -158,7 +158,7 @@ export class NubReference implements INubReference {
     /**
      * itérateur sur les valeurs référencées
      */
-    public get referencedValuesIterator(): IterableIterator<number> {
+    public get referencedValuesIterator(): NumberIterator {
         return this._referencedNub.getReferencedValuesIterator(this._refDefinition);
     }
 
-- 
GitLab