I seem to be having trouble with the logic in the following function. Calendar has a double-linked list of events, and I want to add events, and have them sorted upon being added. Unfortunately, when I test it, all of them are simply appended to the end of the list. To be honest, so far I haven't done more than three Events on a single execution.
Code:
int Calendar::addEventSorted( Event NewEvent ) //Add events in order of date
{
Event* pNewEvent;
pNewEvent = new Event;
if( !pNewEvent )
return( -1 );
pNewEvent->setID( NewEvent.getID() );
pNewEvent->setTitle( NewEvent.getTitle() );
pNewEvent->setDescription( NewEvent.getDescription() );
pNewEvent->setStartTime( NewEvent.getStartTime() );
pNewEvent->setEndTime( NewEvent.getEndTime() );
pNewEvent->setReminderTime( NewEvent.getReminderTime() );
pNewEvent->setRepeatCode( NewEvent.getRepeatCode() );
pNewEvent->mpNext = 0;
pNewEvent->mpPrevious = 0;
if( !mpFirstEvent )
{
mpFirstEvent = mpLastEvent = pNewEvent;
++mNumberOfEvents;
return( 0 );
}
Event* pEventScanner = mpFirstEvent;
while( WhichTimeComesFirst( pEventScanner->getStartTime(), pNewEvent->getStartTime() ) == 1 )
pEventScanner = pEventScanner->mpNext;
pNewEvent->mpNext = pEventScanner;
pNewEvent->mpPrevious = pEventScanner->mpPrevious;
if( pEventScanner->mpPrevious )
pEventScanner->mpPrevious->mpNext = pNewEvent;
else
mpFirstEvent = pNewEvent;
pEventScanner->mpPrevious = pNewEvent;
++mNumberOfEvents;
return( 0 );
}
int WhichTimeComesFirst( tm time1, tm time2 ) //If time1 is first, return 1, return 2 if time2 is first
{
if( time1.tm_year < time2.tm_year )
return( 1 );
if( time1.tm_year > time2.tm_year )
return( 2 );
if( time1.tm_yday < time2.tm_yday )
return( 1 );
if( time1.tm_yday > time1.tm_yday )
return( 2 );
if( time1.tm_hour < time2.tm_hour )
return( 1 );
if( time1.tm_min > time2.tm_min )
return( 2 );
if( time1.tm_sec < time2.tm_sec )
return( 1 );
if( time1.tm_sec > time2.tm_sec )
return( 2 );
return( 0 ); //They happen at the same time
}