Ignore:
Timestamp:
Jan 8, 2012, 7:28:59 PM (10 years ago)
Author:
livings124
Message:

Use concurrent enumeration when generating the list of filtered torrents.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/Controller.m

    r13147 r13148  
    20582058        selectedValues = [fTableView selectedValues];
    20592059   
    2060     NSUInteger active = 0, downloading = 0, seeding = 0, paused = 0;
     2060    __block NSUInteger active = 0, downloading = 0, seeding = 0, paused = 0;
    20612061    NSString * filterType = [fDefaults stringForKey: @"Filter"];
    20622062    BOOL filterActive = NO, filterDownload = NO, filterSeed = NO, filterPause = NO, filterStatus = YES;
     
    20802080    const BOOL filterTracker = searchStrings && [[fDefaults stringForKey: @"FilterSearchType"] isEqualToString: FILTER_TYPE_TRACKER];
    20812081   
    2082     NSMutableArray * allTorrents = [NSMutableArray arrayWithCapacity: [fTorrents count]];
    2083    
    2084     //get count of each type
    2085     for (Torrent * torrent in fTorrents)
    2086     {
     2082    //filter & get counts of each type
     2083    NSIndexSet * indexesOfNonFilteredTorrents = [fTorrents indexesOfObjectsWithOptions: NSEnumerationConcurrent passingTest: ^BOOL(Torrent * torrent, NSUInteger idx, BOOL * stop) {
    20872084        //check status
    20882085        if ([torrent isActive] && ![torrent isCheckingWaiting])
     
    20962093                ++seeding;
    20972094                if (filterStatus && !((filterActive && isActive) || filterSeed))
    2098                     continue;
     2095                    return NO;
    20992096            }
    21002097            else
     
    21022099                ++downloading;
    21032100                if (filterStatus && !((filterActive && isActive) || filterDownload))
    2104                     continue;
     2101                    return NO;
    21052102            }
    21062103        }
     
    21092106            ++paused;
    21102107            if (filterStatus && !filterPause)
    2111                 continue;
     2108                return NO;
    21122109        }
    21132110       
     
    21152112        if (filterGroup)
    21162113            if ([torrent groupValue] != groupFilterValue)
    2117                 continue;
     2114                return NO;
    21182115       
    21192116        //check text field
     
    21542151           
    21552152            if (removeTextField)
    2156                 continue;
    2157         }
    2158        
    2159         [allTorrents addObject: torrent];
    2160     }
     2153                return NO;
     2154        }
     2155       
     2156        return YES;
     2157    }];
     2158   
     2159    NSArray * allTorrents = [fTorrents objectsAtIndexes: indexesOfNonFilteredTorrents];
    21612160   
    21622161    //set button tooltips
Note: See TracChangeset for help on using the changeset viewer.