Commit 43a8a86c authored by Dorchies David's avatar Dorchies David
Browse files

Merge branch '348-prebarrage-doublement-des-avertissements' into 'devel'

Resolve "PreBarrage: Doublement des avertissements"

Closes #348

See merge request cassiopee/jalhyd!151
Showing with 67 additions and 14 deletions
+67 -14
...@@ -352,13 +352,11 @@ export class PreBarrage extends Nub { ...@@ -352,13 +352,11 @@ export class PreBarrage extends Nub {
// calculate Q on all walls so that their result shows Q and not Z1 // calculate Q on all walls so that their result shows Q and not Z1
for (const c of this._children) { for (const c of this._children) {
if (c instanceof PbCloison) { if (c instanceof PbCloison) {
c.inhibitSubmergenceError = true;
// sauvegarde des messages générés pendant les itérations de dichotomie // sauvegarde des messages générés pendant les itérations de dichotomie
const logBackup: cLog = c.result.resultElement.log.clone(); const logBackup: cLog = c.result.resultElement.log.cloneErrors();
c.finalCalc(); c.finalCalc();
// restitution des messages sauvés // restitution des messages sauvés
c.result.resultElement.log.addLog(logBackup); c.result.resultElement.log.addLog(logBackup);
c.inhibitSubmergenceError = false;
} }
} }
...@@ -369,17 +367,6 @@ export class PreBarrage extends Nub { ...@@ -369,17 +367,6 @@ export class PreBarrage extends Nub {
} }
} }
// recalculate Q on all walls without error inhibition
for (const c of this._children) {
if (c instanceof PbCloison) {
// sauvegarde des messages générés pendant les itérations de dichotomie
const logBackup: cLog = c.result.resultElement.log.clone();
c.finalCalc();
// restitution des messages sauvés
c.result.resultElement.log.addLog(logBackup);
}
}
// if an error occurred in any nub, remove all results // if an error occurred in any nub, remove all results
// except if it's a dichotomy convergence error (and only this error) // except if it's a dichotomy convergence error (and only this error)
......
...@@ -66,6 +66,19 @@ export class cLog { ...@@ -66,6 +66,19 @@ export class cLog {
return this._messages; return this._messages;
} }
/**
* @return a clone of "this" (clone error messages only)
*/
public cloneErrors(): cLog {
const res: cLog = new cLog();
for (const m of this._messages) {
if (m.getSeverity() === MessageSeverity.ERROR) {
res.add(m);
}
}
return res;
}
/** /**
* @return a clone of "this" (do not clone messages, keep references to original messages) * @return a clone of "this" (do not clone messages, keep references to original messages)
*/ */
...@@ -115,6 +128,18 @@ export class cLog { ...@@ -115,6 +128,18 @@ export class cLog {
return true; return true;
} }
/**
* @returns true if given message exactly matches one of the messages
*/
private hasMessage(m: Message): boolean {
for (const msg of this._messages) {
if (m.equals(msg, true)) {
return true;
}
}
return false;
}
public get uniqueMessageCodes(): MessageCode[] { public get uniqueMessageCodes(): MessageCode[] {
const res: MessageCode[] = []; const res: MessageCode[] = [];
for (const m of this.messages) { for (const m of this.messages) {
......
...@@ -753,4 +753,45 @@ export class Message { ...@@ -753,4 +753,45 @@ export class Message {
const sourceNub = this.sourceNub; const sourceNub = this.sourceNub;
return MessageCode[this._code] + " " + JSON.stringify(this.extraVar) + (sourceNub === undefined ? "" : " parentnub " + sourceNub.constructor.name); return MessageCode[this._code] + " " + JSON.stringify(this.extraVar) + (sourceNub === undefined ? "" : " parentnub " + sourceNub.constructor.name);
} }
public equals(m: Message, includeSourceNub: boolean): boolean {
if (this._code !== m._code)
return false;
const keys1 = Object.keys(this.extraVar);
const keys2 = Object.keys(m.extraVar);
if (keys1.length !== keys2.length)
return false;
if (keys1.length === 0) {
return true;
}
for (const k of keys1) {
if (!keys2.includes(k)) {
return false;
}
if (this.extraVar[k] !== m.extraVar[k]) {
return false;
}
}
// to be sure all keys are shared, do the same thing the other way around
for (const k of keys2) {
if (!keys1.includes(k)) {
return false;
}
if (this.extraVar[k] !== m.extraVar[k]) {
return false;
}
}
if (includeSourceNub) {
if (this.sourceNub !== undefined && (this.sourceNub.uid !== m.sourceNub?.uid)) {
return false;
}
}
return true;
}
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment