| using System; |
|
|
| namespace UnityEngine.InputSystem.Utilities |
| { |
| |
| |
| |
| |
| internal interface ISavedState |
| { |
| |
| |
| |
| |
| void StaticDisposeCurrentState(); |
|
|
| |
| |
| |
| void RestoreSavedState(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| internal sealed class SavedStructState<T> : ISavedState where T : struct |
| { |
| public delegate void TypedRestore(ref T state); |
|
|
| |
| |
| |
| |
| |
| |
| internal SavedStructState(ref T state, TypedRestore restoreAction, Action staticDisposeCurrentState = null) |
| { |
| Debug.Assert(restoreAction != null, "Restore action is required"); |
|
|
| m_State = state; |
| m_RestoreAction = restoreAction; |
| m_StaticDisposeCurrentState = staticDisposeCurrentState; |
| } |
|
|
| public void StaticDisposeCurrentState() |
| { |
| if (m_StaticDisposeCurrentState != null) |
| { |
| m_StaticDisposeCurrentState(); |
| m_StaticDisposeCurrentState = null; |
| } |
| } |
|
|
| public void RestoreSavedState() |
| { |
| Debug.Assert(m_StaticDisposeCurrentState == null, |
| $"Should have been disposed via {nameof(StaticDisposeCurrentState)} before invoking {nameof(RestoreSavedState)}"); |
| Debug.Assert(m_RestoreAction != null, $"Only invoke {nameof(RestoreSavedState)} once "); |
| m_RestoreAction(ref m_State); |
| m_RestoreAction = null; |
| } |
|
|
| private T m_State; |
| private TypedRestore m_RestoreAction; |
| private Action m_StaticDisposeCurrentState; |
| } |
| } |
|
|