public static unsafe bool HasValueChangeInEvent(this InputControl control, InputEventPtr eventPtr)
        {
            if (control == null)
            {
                throw new ArgumentNullException(nameof(control));
            }
            if (!eventPtr.valid)
            {
                throw new ArgumentNullException(nameof(eventPtr));
            }

            return(control.CompareValue(control.currentStatePtr, control.GetStatePtrFromStateEvent(eventPtr)));
        }
        public static unsafe void WriteValueFromObjectIntoEvent(this InputControl control, InputEventPtr eventPtr, object value)
        {
            if (control == null)
            {
                throw new ArgumentNullException(nameof(control));
            }

            var statePtr = control.GetStatePtrFromStateEvent(eventPtr);

            if (statePtr == null)
            {
                return;
            }

            control.WriteValueFromObjectIntoState(value, statePtr);
        }
        public static unsafe bool ReadUnprocessedValueFromEvent <TValue>(this InputControl <TValue> control, InputEventPtr inputEvent, out TValue value)
            where TValue : struct
        {
            if (control == null)
            {
                throw new ArgumentNullException(nameof(control));
            }

            var statePtr = control.GetStatePtrFromStateEvent(inputEvent);

            if (statePtr == null)
            {
                value = control.ReadDefaultValue();
                return(false);
            }

            value = control.ReadUnprocessedValueFromState(statePtr);
            return(true);
        }
        public static unsafe void WriteValueIntoEvent <TValue>(this InputControl <TValue> control, TValue value, InputEventPtr eventPtr)
            where TValue : struct
        {
            if (control == null)
            {
                throw new ArgumentNullException(nameof(control));
            }
            if (!eventPtr.valid)
            {
                throw new ArgumentNullException(nameof(eventPtr));
            }

            var statePtr = control.GetStatePtrFromStateEvent(eventPtr);

            if (statePtr == null)
            {
                return;
            }

            control.WriteValueIntoState(value, statePtr);
        }