//move up to front void Used(LoadedSound snd) { LoadedSoundPtr ptr = lruTail; while (ptr.Sound != snd) { ptr = ptr.Previous; } if (ptr == lruTail) { return; } if (ptr == lruHead) { lruHead = ptr.Next; ptr.Next.Previous = null; } else { ptr.Next.Previous = ptr.Previous; ptr.Previous.Next = ptr.Next; } ptr.Previous = lruTail; ptr.Next = null; lruTail.Next = ptr; lruTail = ptr; }
void AddLoaded(LoadedSound snd) { if (lruHead == null) { lruHead = lruTail = new LoadedSoundPtr() { Sound = snd }; loadedSounds[snd.Name] = snd; return; } LoadedSoundPtr ptr; if (loadedSounds.Count == SOUNDS_MAX) { FLLog.Debug("Sounds", "Evicting sound"); //Evict oldest and reuse ptr object var h = lruHead; if (h.Sound.Data != null) { h.Sound.Data.Dispose(); } loadedSounds.Remove(h.Sound.Name); lruHead = h.Next; ptr = h; ptr.Sound = snd; ptr.Next = null; ptr.Previous = lruTail; } else { ptr = new LoadedSoundPtr() { Sound = snd, Previous = lruTail }; } lruTail.Next = ptr; lruTail = ptr; loadedSounds[snd.Name] = snd; }