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