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 }



LinkBack URL
About LinkBacks


