From ac51e98cb88c8cbec51e8e80f2440f8d215fc8b3 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 21 Jan 2012 01:31:14 +0100 Subject: [PATCH] Improved removal performance in Maxsi::SortedList. --- libmaxsi/hsrc/sortedlist.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/libmaxsi/hsrc/sortedlist.h b/libmaxsi/hsrc/sortedlist.h index 036a7e57..a810257d 100644 --- a/libmaxsi/hsrc/sortedlist.h +++ b/libmaxsi/hsrc/sortedlist.h @@ -1,6 +1,6 @@ /****************************************************************************** - COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011. + COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011, 2012. This file is part of LibMaxsi. @@ -149,20 +149,19 @@ namespace Maxsi if ( !(flags & FLAG_SORTED) ) { Sort(); } ASSERT(index < listused); - T result = list[index]; + // TODO: It may be possible to further speed up removal by delaying + // the expensive memory copy operation. - if ( index == listused-1 ) + T result = list[index]; + list[index].~T(); + for ( size_t i = index+1; i < listused; i++ ) { - list[--listused].~T(); - } - else - { - list[index].~T(); - list[index] = list[--listused]; - list[listused].~T(); - flags &= ~FLAG_SORTED; + list[i-1] = list[i]; + list[i].~T(); } + listused--; + return result; }