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