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

Reply via email to