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 <[email protected]> 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