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