From 8119bffff09d0cc20fd7b0b43bd10b40ed6a0a5c Mon Sep 17 00:00:00 2001 From: Luc Maisonobe <luc@orekit.org> Date: Tue, 30 Nov 2021 10:36:16 +0100 Subject: [PATCH] Fixed copy errors when using dictionary views. --- src/main/java/org/orekit/utils/DoubleArrayDictionary.java | 6 ++++-- src/main/java/org/orekit/utils/FieldArrayDictionary.java | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/orekit/utils/DoubleArrayDictionary.java b/src/main/java/org/orekit/utils/DoubleArrayDictionary.java index 0d75f26c4b..e6f3e71d16 100644 --- a/src/main/java/org/orekit/utils/DoubleArrayDictionary.java +++ b/src/main/java/org/orekit/utils/DoubleArrayDictionary.java @@ -63,8 +63,10 @@ public class DoubleArrayDictionary implements Serializable { * @param dictionary dictionary to use for initializing entries */ public DoubleArrayDictionary(final DoubleArrayDictionary dictionary) { - this(DEFAULT_INITIAL_CAPACITY + dictionary.data.size()); - for (final Entry entry : dictionary.data) { + // take care to call dictionary.getData() and not use dictionary.data, + // otherwise we get an empty dictionary when using a DoubleArrayDictionary.view + this(DEFAULT_INITIAL_CAPACITY + dictionary.getData().size()); + for (final Entry entry : dictionary.getData()) { // we don't call put(key, value) to avoid the overhead of the unneeded call to remove(key) data.add(new Entry(entry.getKey(), entry.getValue())); } diff --git a/src/main/java/org/orekit/utils/FieldArrayDictionary.java b/src/main/java/org/orekit/utils/FieldArrayDictionary.java index b59c747bce..3f585417f4 100644 --- a/src/main/java/org/orekit/utils/FieldArrayDictionary.java +++ b/src/main/java/org/orekit/utils/FieldArrayDictionary.java @@ -70,8 +70,10 @@ public class FieldArrayDictionary<T extends CalculusFieldElement<T>> { * @param dictionary dictionary to use for initializing entries */ public FieldArrayDictionary(final FieldArrayDictionary<T> dictionary) { - this(dictionary.getField(), DEFAULT_INITIAL_CAPACITY + dictionary.data.size()); - for (final Entry entry : dictionary.data) { + // take care to call dictionary.getData() and not use dictionary.data, + // otherwise we get an empty dictionary when using a FieldArrayDictionary.view + this(dictionary.getField(), DEFAULT_INITIAL_CAPACITY + dictionary.getData().size()); + for (final Entry entry : dictionary.getData()) { // we don't call put(key, value) to avoid the overhead of the unneeded call to remove(key) data.add(new Entry(entry.getKey(), entry.getValue())); } -- GitLab