63 lines
1.6 KiB
Mathematica
63 lines
1.6 KiB
Mathematica
|
//
|
||
|
// RABatchChangesEntity.m
|
||
|
// RATreeView
|
||
|
//
|
||
|
// Created by Rafal Augustyniak on 17/11/15.
|
||
|
// Copyright © 2015 Rafal Augustyniak. All rights reserved.
|
||
|
//
|
||
|
|
||
|
|
||
|
#import "RABatchChangeEntity.h"
|
||
|
|
||
|
|
||
|
@implementation RABatchChangeEntity
|
||
|
|
||
|
+ (instancetype)batchChangeEntityWithBlock:(void (^)())updates type:(RABatchChangeType)type ranking:(NSInteger)ranking
|
||
|
{
|
||
|
NSParameterAssert(updates);
|
||
|
RABatchChangeEntity *entity = [RABatchChangeEntity new];
|
||
|
entity.type = type;
|
||
|
entity.ranking = ranking;
|
||
|
entity.updatesBlock = updates;
|
||
|
|
||
|
return entity;
|
||
|
}
|
||
|
|
||
|
- (NSComparisonResult)compare:(RABatchChangeEntity *)otherEntity
|
||
|
{
|
||
|
if ([self destructiveOperation]) {
|
||
|
if (![otherEntity destructiveOperation]) {
|
||
|
return NSOrderedAscending;
|
||
|
} else {
|
||
|
return [@(otherEntity.ranking) compare:@(self.ranking)];
|
||
|
}
|
||
|
} else if (self.type == RABatchChangeTypeItemMove && otherEntity.type != RABatchChangeTypeItemMove) {
|
||
|
return [otherEntity destructiveOperation] ? NSOrderedAscending : NSOrderedDescending;
|
||
|
|
||
|
} else if ([self constructiveOperation]) {
|
||
|
if (![otherEntity constructiveOperation]) {
|
||
|
return NSOrderedDescending;
|
||
|
} else {
|
||
|
return [@(self.ranking) compare:@(otherEntity.ranking)];
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
return NSOrderedSame;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- (BOOL)constructiveOperation
|
||
|
{
|
||
|
return self.type == RABatchChangeTypeItemRowExpansion
|
||
|
|| self.type == RABatchChangeTypeItemRowInsertion;
|
||
|
}
|
||
|
|
||
|
- (BOOL)destructiveOperation
|
||
|
{
|
||
|
return self.type == RABatchChangeTypeItemRowCollapse
|
||
|
|| self.type == RABatchChangeTypeItemRowDeletion;
|
||
|
}
|
||
|
|
||
|
@end
|
||
|
|