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; } } } }