From fd2b72891cf06ea1605efe0a7a00e01f6abf16fa Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Fri, 27 Jul 2018 15:17:14 +0200 Subject: [PATCH] ENH: added HashPtrTable remove(const Key&) method - already had remove() by iterator, but not by key. As per erase() which already worked by iterator or by key. --- .../HashTables/HashPtrTable/HashPtrTable.C | 8 ++++++ .../HashTables/HashPtrTable/HashPtrTable.H | 28 +++++++++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.C b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.C index 57c4b9bd378..7ca213778ea 100644 --- a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.C +++ b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.C @@ -86,6 +86,14 @@ Foam::autoPtr<T> Foam::HashPtrTable<T, Key, Hash>::remove(iterator& iter) } +template<class T, class Key, class Hash> +Foam::autoPtr<T> Foam::HashPtrTable<T, Key, Hash>::remove(const Key& key) +{ + auto iter = this->find(key); + return this->remove(iter); +} + + template<class T, class Key, class Hash> bool Foam::HashPtrTable<T, Key, Hash>::erase(iterator& iter) { diff --git a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H index 655c715c5e5..5e6b5514d1d 100644 --- a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H +++ b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H @@ -123,17 +123,28 @@ public: // Edit - //- Remove and return the pointer specified by given iterator. + //- Remove entry specified by given iterator. // Includes a safeguard against the end-iterator. + // + // \return entry as an encapsulated pointer. autoPtr<T> remove(iterator& iter); - //- Erase an entry specified by given iterator and delete the + //- Remove entry specified by given key. + // + // \return entry as an encapsulated pointer. + autoPtr<T> remove(const Key& key); + + //- Erase entry specified by given iterator and delete the //- allocated pointer. // Includes a safeguard against the end-iterator. + // + // \return True if item was removed bool erase(iterator& iter); - //- Erase an entry specified by the given key and delete the + //- Erase entry specified by given key and delete the //- allocated pointer. + // + // \return True if item was removed bool erase(const Key& key); //- Clear all entries from table and delete any allocated pointers @@ -169,19 +180,20 @@ public: // Housekeeping - //- No insert() with raw pointers (potential memory leaks) - // Use insert() with autoPtr or set() + //- No insert() with raw pointers (potential memory leaks). + //- Use insert() with autoPtr or set() inline bool insert(const Key&, T*) = delete; //- Insert a new entry, not overwriting existing entries. - // \return True if the entry inserted, which means that it did - // not previously exist in the table. + // + // \return True if the entry inserted (not previously in table) inline bool insert(const Key& key, autoPtr<T>& aptr); //- Insert a new entry, not overwriting existing entries. + // + // \return True if the entry inserted (not previously in table) inline bool insert(const Key& key, autoPtr<T>&& aptr); - //- Use set(), not insert() to avoid potential memory leaks //- Assign a new entry, overwriting existing entries. inline bool set(const Key& key, T* ptr); -- GitLab