From 900c804bf0d7f8fe3ff519e7f72160eb1297c535 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Thu, 11 Aug 2016 21:41:55 +0100
Subject: [PATCH] HashTable: Added void
 operator=(std::initializer_list<Tuple2<Key, T>>)

---
 applications/test/HashTable/Test-hashTable.C  | 10 ++++++++
 .../HashTables/HashTable/HashTable.C          | 23 +++++++++++++++++++
 .../HashTables/HashTable/HashTable.H          |  5 +++-
 3 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/applications/test/HashTable/Test-hashTable.C b/applications/test/HashTable/Test-hashTable.C
index e0f65bd2819..f4e16fecf38 100644
--- a/applications/test/HashTable/Test-hashTable.C
+++ b/applications/test/HashTable/Test-hashTable.C
@@ -165,6 +165,16 @@ int main()
     table3.clearStorage();
     Info<< table3 << nl;
 
+    table1 =
+    {
+        {"aca", 3.0},
+        {"aaw", 6.0},
+        {"acr", 8.0},
+        {"aec", 10.0}
+    };
+
+    Info<< "\ntable1" << table1 << nl;
+
     Info<< "\nDone\n";
 
     return 0;
diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C
index 845bb8c4391..0c5df4c0340 100644
--- a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C
+++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C
@@ -563,6 +563,29 @@ void Foam::HashTable<T, Key, Hash>::operator=
 }
 
 
+template<class T, class Key, class Hash>
+void Foam::HashTable<T, Key, Hash>::operator=
+(
+    std::initializer_list<Tuple2<Key, T>> lst
+)
+{
+    // Could be zero-sized from a previous transfer()
+    if (!tableSize_)
+    {
+        resize(lst.size());
+    }
+    else
+    {
+        clear();
+    }
+
+    for (const Tuple2<Key, T>& pair : lst)
+    {
+        insert(pair.first(), pair.second());
+    }
+}
+
+
 template<class T, class Key, class Hash>
 bool Foam::HashTable<T, Key, Hash>::operator==
 (
diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H
index 4ef49f1a211..037199636da 100644
--- a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H
+++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H
@@ -213,7 +213,7 @@ public:
         HashTable(const Xfer<HashTable<T, Key, Hash>>&);
 
         //- Construct from an initializer list
-        HashTable(std::initializer_list<Tuple2<Key, T>> lst);
+        HashTable(std::initializer_list<Tuple2<Key, T>>);
 
 
     //- Destructor
@@ -315,6 +315,9 @@ public:
         //- Assignment
         void operator=(const HashTable<T, Key, Hash>&);
 
+        //- Assignment to an initializer list
+        void operator=(std::initializer_list<Tuple2<Key, T>>);
+
         //- Equality. Hash tables are equal if the keys and values are equal.
         //  Independent of table storage size and table order.
         bool operator==(const HashTable<T, Key, Hash>&) const;
-- 
GitLab