Example #1
0
void Computer::ManageOldLogs ()
{

	//
	// Delete any logs older than a certain age
	//

	for ( int i = logbank.logs.Size () - 1; i >= 0; --i ) {
		if ( logbank.logs.ValidIndex (i) ) {

			AccessLog *al = logbank.logs.GetData (i);

			if ( al ) {

				Date testdate;
				testdate.SetDate ( &(al->date) );
				testdate.AdvanceMinute ( TIME_TOEXPIRELOGS );

				if ( testdate.Before ( &(game->GetWorld ()->date) ) ) {

					delete logbank.logs.GetData (i);
					logbank.logs.RemoveData (i);

					if ( logbank.internallogs.ValidIndex ( i ) ) {
						delete logbank.internallogs.GetData (i);				
						logbank.internallogs.RemoveData (i);
					}

				}

			}

		}

	}
	
	//
	// Pack the new log structures together
	//

	int nextlog = 0;

	for ( int il = 0; il < logbank.logs.Size (); ++il ) {

		if ( il > nextlog ) nextlog = il;

		if ( !logbank.logs.ValidIndex (il) ) {

			// This is a blank spot
			// Look for the next available log to fill this space
			
			bool found = false;

			for ( ; nextlog < logbank.logs.Size (); ++nextlog ) {
				
				if ( logbank.logs.ValidIndex (nextlog) ) {

					logbank.logs.PutData	( logbank.logs.GetData (nextlog), il );
					logbank.logs.RemoveData (nextlog);

					if ( logbank.internallogs.ValidIndex(nextlog) ) {
						logbank.internallogs.PutData ( logbank.internallogs.GetData (nextlog), il );
						logbank.internallogs.RemoveData (nextlog);
					}

					++nextlog;

					found = true;
					break;

				}

			}

			if ( !found ) {

				// There are no more valid logs - 
				// So resize the DArray since this is now the max size
				// Then quit

				logbank.logs.SetSize ( il );
				logbank.internallogs.SetSize ( il );
				break;

			}

		}

	}

}