From 0c784b7594328032b804e4d2951810ca103be4b4 Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Thu, 3 Dec 2015 12:30:12 -0800 Subject: [PATCH] Use Array.reserveCapacity to support NSArray/NSMutableArray capacity --- Foundation/NSArray.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Foundation/NSArray.swift b/Foundation/NSArray.swift index d6bcf79cf1..38f0c289b2 100644 --- a/Foundation/NSArray.swift +++ b/Foundation/NSArray.swift @@ -69,6 +69,7 @@ public class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NS } public required init(objects: UnsafePointer, count cnt: Int) { + _storage.reserveCapacity(cnt) for idx in 0.., count cnt: Int) { @@ -599,6 +604,7 @@ public class NSMutableArray : NSArray { public func replaceObjectsInRange(range: NSRange, withObjectsFromArray otherArray: [AnyObject], range otherRange: NSRange) { NSUnimplemented() } public func replaceObjectsInRange(range: NSRange, withObjectsFromArray otherArray: [AnyObject]) { if self.dynamicType === NSMutableArray.self { + _storage.reserveCapacity(count - range.length + otherArray.count) for var idx = 0; idx < range.length; idx++ { _storage[idx + range.location] = otherArray[idx] } @@ -622,6 +628,10 @@ public class NSMutableArray : NSArray { public func insertObjects(objects: [AnyObject], atIndexes indexes: NSIndexSet) { precondition(objects.count == indexes.count) + if self.dynamicType === NSMutableArray.self { + _storage.reserveCapacity(count + indexes.count) + } + var objectIdx = 0 indexes.enumerateIndexesUsingBlock() { (insertionIndex, _) in self.insertObject(objects[objectIdx++], atIndex: insertionIndex)