Replace for loop with call to standard library function (#8194)
authorBenjamin Lindley <benjameslindley@gmail.com>
Tue, 5 Mar 2019 07:13:15 +0000 (01:13 -0600)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Tue, 5 Mar 2019 07:13:15 +0000 (08:13 +0100)
This loop makes multiple passes over m_stack (type std::list) in order to remove all elements with a specified value. Replacing the loop with a call to std::list::remove does the same job, but in only one pass.

src/gui/mainmenumanager.h

index ea9327813407e03dae232ebfaba72cb6793dd84e..102492255b78860f2baf11db7ea6ad5ed783b68d 100644 (file)
@@ -62,21 +62,7 @@ public:
        virtual void deletingMenu(gui::IGUIElement *menu)
        {
                // Remove all entries if there are duplicates
-               bool removed_entry;
-               do{
-                       removed_entry = false;
-                       for(std::list<gui::IGUIElement*>::iterator
-                                       i = m_stack.begin();
-                                       i != m_stack.end(); ++i)
-                       {
-                               if(*i == menu)
-                               {
-                                       m_stack.erase(i);
-                                       removed_entry = true;
-                                       break;
-                               }
-                       }
-               }while(removed_entry);
+               m_stack.remove(menu);
 
                /*core::list<GUIModalMenu*>::Iterator i = m_stack.getLast();
                assert(*i == menu);