delegate_ = delegate;
}
-- (bool) hasPackage:(Package *)package {
- return true;
-}
-
- (bool) shouldYield {
return false;
}
- (NSArray *) _reloadPackages:(NSArray *)packages {
// XXX: maybe move @synchronized() to _reloadData?
@synchronized (database_) {
- NSMutableArray *filtered([NSMutableArray arrayWithCapacity:[packages count]]);
-
- _profile(PackageTable$reloadData$Filter)
- for (Package *package in packages)
- if ([self hasPackage:package])
- [filtered addObject:package];
- _end
-
- return filtered;
+ return [NSArray arrayWithArray:packages];
} }
- (void) _reloadData {
}
- (void) setFilter:(SEL)filter {
+@synchronized (self) {
filter_ = filter;
/* XXX: this is an unsafe optimization of doomy hell */
_assert(method != NULL);
imp_ = method_getImplementation(method);
_assert(imp_ != NULL);
-}
+} }
- (void) setObject:(id)object {
+@synchronized (self) {
object_ = object;
-}
+} }
- (void) setObject:(id)object forFilter:(SEL)filter {
[self setFilter:filter];
[self setObject:object];
}
-- (bool) hasPackage:(Package *)package {
- _profile(FilteredPackageTable$hasPackage)
- return [package valid] && (*reinterpret_cast<bool (*)(id, SEL, id)>(imp_))(package, filter_, object_);
+- (NSArray *) _reloadPackages:(NSArray *)packages {
+// XXX: maybe move @synchronized() to _reloadData?
+@synchronized (database_) {
+ NSMutableArray *filtered([NSMutableArray arrayWithCapacity:[packages count]]);
+
+ IMP imp;
+ SEL filter;
+ _H<NSObject> object;
+
+ @synchronized (self) {
+ imp = imp_;
+ filter = filter_;
+ object = object_;
+ }
+
+ _profile(PackageTable$reloadData$Filter)
+ for (Package *package in packages)
+ if ([package valid] && (*reinterpret_cast<bool (*)(id, SEL, id)>(imp))(package, filter, object))
+ [filtered addObject:package];
_end
-}
+
+ return filtered;
+} }
- (id) initWithDatabase:(Database *)database title:(NSString *)title filter:(SEL)filter with:(id)object {
if ((self = [super initWithDatabase:database title:title]) != nil) {