static public T ProcessLockSection <T>(this GamepadBase item, GamepadComponentId component, InputAtomLock @lock, Operation <T> operation)
        {
            T to_return = default(T);

            item.ProcessLockSection(component, @lock, delegate() {
                to_return = operation();
            });

            return(to_return);
        }
 static public void ExitLockSection(this GamepadBase item, GamepadComponentId component, InputAtomLock @lock)
 {
     item.GetComponent(component).ExitLockSection(@lock);
 }
 static public void ProcessLockSection(this GamepadBase item, GamepadComponentId component, InputAtomLock @lock, Process process)
 {
     item.EnterLockSection(component, @lock);
     process();
     item.ExitLockSection(component, @lock);
 }
 static public void ExitLockSection(this GamepadBase item, IEnumerable <GamepadComponentId> components, InputAtomLock @lock)
 {
     components.Process(i => item.GetComponent(i).ExitLockSection(@lock));
 }