diff --git a/applications/test/HashTable/Test-hashTable.C b/applications/test/HashTable/Test-hashTable.C index e0f65bd2819a39ea0a2742a954da2109d35c35f0..f4e16fecf38e6ae3f275302fefc760637c73d451 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 845bb8c4391ef1dc8cbe32d2a6432d34f56da2e8..0c5df4c0340bdc5a24a6b7306ce4b65139e6b1b8 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 4ef49f1a21121f891f1731179cd84364cbba9c2a..037199636daca5da911422c2943b53ceb44beb7d 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;