| @@ -981,7 +981,7 @@ public: | |||||
| @see remove, removeRange, removeAllInstancesOf | @see remove, removeRange, removeAllInstancesOf | ||||
| */ | */ | ||||
| template <typename PredicateType> | template <typename PredicateType> | ||||
| int removeIf (PredicateType predicate) | |||||
| int removeIf (PredicateType&& predicate) | |||||
| { | { | ||||
| int numRemoved = 0; | int numRemoved = 0; | ||||
| const ScopedLockType lock (getLock()); | const ScopedLockType lock (getLock()); | ||||
| @@ -1040,17 +1040,22 @@ public: | |||||
| @see remove, removeFirstMatchingValue, removeAllInstancesOf, removeRange | @see remove, removeFirstMatchingValue, removeAllInstancesOf, removeRange | ||||
| */ | */ | ||||
| void removeLast (int howManyToRemove = 1) | void removeLast (int howManyToRemove = 1) | ||||
| { | |||||
| const ScopedLockType lock (getLock()); | |||||
| { | |||||
| jassert (howManyToRemove >= 0); | |||||
| if (howManyToRemove > 0) | |||||
| { | |||||
| const ScopedLockType lock (getLock()); | |||||
| if (howManyToRemove > numUsed) | |||||
| howManyToRemove = numUsed; | |||||
| if (howManyToRemove > numUsed) | |||||
| howManyToRemove = numUsed; | |||||
| for (int i = 1; i <= howManyToRemove; ++i) | |||||
| data.elements[numUsed - i].~ElementType(); | |||||
| for (int i = 1; i <= howManyToRemove; ++i) | |||||
| data.elements[numUsed - i].~ElementType(); | |||||
| numUsed -= howManyToRemove; | |||||
| minimiseStorageAfterRemoval(); | |||||
| numUsed -= howManyToRemove; | |||||
| minimiseStorageAfterRemoval(); | |||||
| } | |||||
| } | } | ||||
| /** Removes any elements which are also in another array. | /** Removes any elements which are also in another array. | ||||