From 275a59af66ee7c110aaa7a96b5374c32af4b3271 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Thu, 11 Aug 2016 21:41:55 +0100 Subject: [PATCH] HashTable: Added void operator=(std::initializer_list>) --- 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 e0f65bd28..f4e16fecf 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 845bb8c43..0c5df4c03 100644 --- a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C +++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C @@ -563,6 +563,29 @@ void Foam::HashTable::operator= } +template +void Foam::HashTable::operator= +( + std::initializer_list> lst +) +{ + // Could be zero-sized from a previous transfer() + if (!tableSize_) + { + resize(lst.size()); + } + else + { + clear(); + } + + for (const Tuple2& pair : lst) + { + insert(pair.first(), pair.second()); + } +} + + template bool Foam::HashTable::operator== ( diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H index 4ef49f1a2..037199636 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>&); //- Construct from an initializer list - HashTable(std::initializer_list> lst); + HashTable(std::initializer_list>); //- Destructor @@ -315,6 +315,9 @@ public: //- Assignment void operator=(const HashTable&); + //- Assignment to an initializer list + void operator=(std::initializer_list>); + //- Equality. Hash tables are equal if the keys and values are equal. // Independent of table storage size and table order. bool operator==(const HashTable&) const;