- (NSArray *)recurrenceRangesWithinCalendarDateRange:(NGCalendarDateRange *)_r
firstInstanceCalendarDateRange:(NGCalendarDateRange *)_fir
{
- iCalRecurrenceRule *rule;
- iCalRecurrenceCalculator *calc;
- NSMutableArray *ranges;
- unsigned i, count, rCount;
-
- ranges = [NSMutableArray array];
- count = [self->rRules count];
- for (i = 0; i < count; i++) {
- NSArray *rs;
-
- rule = [self->rRules objectAtIndex:i];
- calc = [iCalRecurrenceCalculator recurrenceCalculatorForRecurrenceRule:rule
- withFirstInstanceCalendarDateRange:_fir];
- rs = [calc recurrenceRangesWithinCalendarDateRange:_r];
- [ranges addObjectsFromArray:rs];
- }
-
- if (![ranges count])
- return nil;
-
- /* test if any exceptions do match */
- count = [self->exRules count];
- for (i = 0; i < count; i++) {
- NSArray *rs;
-
- rule = [self->exRules objectAtIndex:i];
- calc = [iCalRecurrenceCalculator recurrenceCalculatorForRecurrenceRule:rule
- withFirstInstanceCalendarDateRange:_fir];
- rs = [calc recurrenceRangesWithinCalendarDateRange:_r];
- [ranges removeObjectsInArray:rs];
- }
-
- if (![ranges count])
- return nil;
-
- /* exception dates are also possible */
- rCount = [ranges count];
- count = [self->exDates count];
- for (i = 0; i < count; i++) {
- NSCalendarDate *exDate;
- NGCalendarDateRange *r;
- unsigned k;
-
- exDate = [self->exDates objectAtIndex:i];
- for (k = 0; k < rCount; k++) {
- r = [ranges objectAtIndex:(rCount - k) - 1];
- if ([r containsDate:exDate]) {
- [ranges removeObjectAtIndex:k];
- }
- }
- }
- return ranges;
+ return [iCalRecurrenceCalculator recurrenceRangesWithinCalendarDateRange:_r
+ firstInstanceCalendarDateRange:_fir
+ recurrenceRules:self->rRules
+ exceptionRules:self->exRules
+ exceptionDates:self->exDates];
}