]> git.saurik.com Git - cydia.git/commitdiff
Faster searching, although I still do not have a clue at optimization.
authorGrant Paul <chpwn@chpwn.com>
Sat, 11 Jun 2011 07:26:31 +0000 (00:26 -0700)
committerGrant Paul <chpwn@chpwn.com>
Sun, 18 Sep 2011 22:56:01 +0000 (15:56 -0700)
MobileCydia.mm

index 431145e9d39d098f75e409018adfa054a1551f65..a6367fcc2b941fe217f8d8acfb45cde2a7818157 100644 (file)
@@ -6144,7 +6144,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 - (NSInteger) tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
-    if ([[self class] supportsSearch])
+    if ([[self class] supportsSearch]) {
         if (index == 0) {
             [tableView setContentOffset:CGPointZero animated:NO];
             return NSNotFound;
@@ -6164,7 +6164,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
     return [NSMutableArray arrayWithArray:packages];
 } }
 
-- (NSMutableArray *) searchPackages:(NSMutableArray *)packages {
+- (NSArray *) searchPackages:(NSArray *)packages {
     if (search_ == nil || [search_ length] == 0) return packages;
 
     IMP imp = NULL;
@@ -6178,23 +6178,22 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         _assert(imp != NULL);
     }
 
-    for (size_t offset(0), end([packages count]); offset != end; ++offset) {
-        if (!(*reinterpret_cast<bool (*)(id, SEL, id)>(imp))([packages objectAtIndex:offset], filter, search_)) {
-            [packages removeObjectAtIndex:offset];
+    NSMutableArray *searched = [NSMutableArray arrayWithCapacity:([packages count] / 4)];
 
-            --offset;
-            --end;
+    for (Package *package in packages) {
+        if ((*reinterpret_cast<bool (*)(id, SEL, id)>(imp))(package, filter, search_)) {
+            [searched addObject:package];
         }
     }
 
-    return packages;
+    return searched;
 }
 
 - (void) reloadData {
     NSArray *packages;
 
   reload:
-    packages = [[self _reloadPackages] mutableCopy];
+    packages = [self _reloadPackages];
     packages = [self searchPackages:packages];
 
 @synchronized (database_) {