/// <summary> /// Same as <see cref="ValidateAndThrow(TrackableChanges{T})"/> but also disposes the <paramref name="changes"/>. /// </summary> /// <param name="changes">A set of trackable changes (added, updated & removed)</param> public void ValidateAndDisposeIfThrown(TrackableChanges <T> changes) { try { ValidateAndThrow(changes); } catch { changes.Dispose(); throw; } }
/// <summary> /// Same as <see cref="ValidateAndThrow(TrackableChanges{T})"/> but also disposes the <paramref name="changes"/>. /// </summary> /// <param name="changes">A set of changes to trackables (added, updated and removed).</param> public void ValidateAndDisposeIfThrown(TrackableChanges <T> changes) { try { using (new ScopedProfiler("ValidateTrackableChanges")) ValidateAndThrow(changes); } catch { changes.Dispose(); throw; } }
/// <summary> /// Performs validation checks that ensure a trackable does not exist in multiple lists /// simultaneously (for example, both added and removed). Also ensures that a trackable cannot be /// removed before being added. /// </summary> /// <param name="changes">A set of changes to trackables (added, updated and removed).</param> public void ValidateAndThrow(TrackableChanges <T> changes) { s_IdSet.Clear(); foreach (var trackable in changes.added) { AddToSetAndThrowIfDuplicate(trackable.trackableId, false, k_AddedAction); m_Trackables.Add(trackable.trackableId); } foreach (var trackable in changes.updated) { AddToSetAndThrowIfDuplicate(trackable.trackableId, true, k_UpdatedAction); } foreach (var trackableId in changes.removed) { AddToSetAndThrowIfDuplicate(trackableId, true, k_RemovedAction); m_Trackables.Remove(trackableId); } }