void Foam::HashTable<T, Key, Hash>::operator= ( const HashTable<T, Key, Hash>& rhs ) { // Check for assignment to self if (this == &rhs) { FatalErrorInFunction << "attempted assignment to self" << abort(FatalError); } // Could be zero-sized from a previous transfer() if (!tableSize_) { resize(rhs.tableSize_); } else { clear(); } for (const_iterator iter = rhs.cbegin(); iter != rhs.cend(); ++iter) { insert(iter.key(), *iter); } }
Foam::HashTable<T, Key, Hash>::HashTable(const HashTable<T, Key, Hash>& ht) : HashTable<T, Key, Hash>(ht.tableSize_) { for (const_iterator iter = ht.cbegin(); iter != ht.cend(); ++iter) { insert(iter.key(), *iter); } }
Foam::HashSet<Key, Hash>::HashSet ( const HashTable<AnyType, Key, AnyHash>& h ) : HashTable<nil, Key, Hash>(h.size()) { for ( typename HashTable<AnyType, Key, AnyHash>::const_iterator cit = h.cbegin(); cit != h.cend(); ++cit ) { this->insert(cit.key()); } }
Foam::HashTable<T, Key, Hash>::HashTable(const HashTable<T, Key, Hash>& ht) : HashTableCore(), nElmts_(0), tableSize_(ht.tableSize_), table_(NULL) { if (tableSize_) { table_ = new hashedEntry*[tableSize_]; for (label hashIdx = 0; hashIdx < tableSize_; hashIdx++) { table_[hashIdx] = 0; } for (const_iterator iter = ht.cbegin(); iter != ht.cend(); ++iter) { insert(iter.key(), *iter); } } }
bool Foam::HashTable<T, Key, Hash>::operator== ( const HashTable<T, Key, Hash>& rhs ) const { // Sizes (number of keys) must match if (size() != rhs.size()) { return false; } for (const_iterator iter = rhs.cbegin(); iter != rhs.cend(); ++iter) { const_iterator fnd = find(iter.key()); if (fnd == cend() || fnd() != iter()) { return false; } } return true; }