Just because I can't let something like this go... I wasn't able to test this, so mileage may vary ;-)
function removeRangeFromSelection(startDate:Date, endDate:Date):void { var n:int, rangeEnd:Date, rangeStart:Date; if (!endDate || endDate < startDate) return; for (n = 0; n < selectedRangeCount; n++) { rangeStart = _selectedRanges[n].rangeStart; if (endDate < rangeStart) continue; rangeEnd = _selectedRanges[n].rangeEnd; if (startDate <= rangeStart) { if (endDate < rangeEnd) { _selectedRanges[n].rangeStart = incrementDate(endDate); } else { _selectedRanges[n] = _selectedRanges[selectedRangeCount - 1]; _selectedRanges[selectedRangeCount - 1] = null; selectedRangeCount -= 1; } } else if (startDate <= rangeEnd) { if (endDate < rangeEnd) { var temp:Date = _selectedRanges[n].rangeEnd; _selectedRanges[n].rangeEnd = incrementDate(startDate, -1); _selectedRanges[selectedRangeCount] = {}; _selectedRanges[selectedRangeCount].rangeStart = incrementDate(endDate); _selectedRanges[selectedRangeCount].rangeEnd = temp; selectedRangeCount += 1; } else { _selectedRanges[n].rangeEnd = incrementDate(startDate, -1); } } } } EdB On Wed, May 8, 2013 at 9:45 AM, Justin Mclean <jus...@classsoftware.com> wrote: > Hi, > > Just thought I'd share this lovely bit code from CalendarLayout. Anyway want > to have a go at rewriting it so that's its human readable? > > I particular like: > - How it possible to get a value of s1 (eg 10) that's not in the switch > statement. > - There's a check for !startDate first but the check for !endDate is last > - Comparisons use a mixture of < and <= and > and >= > > There's a bug here - karma points for anyone who can work it out. > > mx_internal function removeRangeFromSelection(startDate:Date, > endDate:Date):void > { > for (var n:int = 0; n < selectedRangeCount; n++) > { > var s1:int; > > if (!startDate || startDate <= _selectedRanges[n].rangeStart) > s1 = 1; > else if (startDate <= _selectedRanges[n].rangeEnd) > s1 = 2; > else if (startDate > _selectedRanges[n].rangeEnd) > s1 = 3; > > if (endDate < _selectedRanges[n].rangeStart) > s1 *= 5; > else if (endDate < _selectedRanges[n].rangeEnd) > s1 *= 7; > else if (!endDate || endDate >= _selectedRanges[n].rangeEnd) > s1 *= 11; > > switch (s1) > { > case 5: > case 33: > break; > > case 14: > { > var temp:Date = _selectedRanges[n].rangeEnd; > > _selectedRanges[n].rangeEnd = incrementDate(startDate,-1); > > _selectedRanges[selectedRangeCount] = {}; > _selectedRanges[selectedRangeCount].rangeStart = > incrementDate(endDate); > _selectedRanges[selectedRangeCount].rangeEnd = temp; > selectedRangeCount += 1; > break; > } > > case 7: > { > _selectedRanges[n].rangeStart = incrementDate(endDate); > break; > } > > case 22: > { > _selectedRanges[n].rangeEnd = incrementDate(startDate,-1); > break; > } > > case 11: > { > _selectedRanges[n] = _selectedRanges[selectedRangeCount-1]; > _selectedRanges[selectedRangeCount-1] = null; > selectedRangeCount -= 1; > break; > } > } > } > } > > Thanks, > Justin -- Ix Multimedia Software Jan Luykenstraat 27 3521 VB Utrecht T. 06-51952295 I. www.ixsoftware.nl