Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.12 KB | None | 0 0
  1. namespace UnEx_Sequences.Internal.Experimental.Linked
  2. {
  3.     //Этот алгоритм не оправдал ожидания, нужно пересмотреть алгоритмы и придумать наиболее эффективный.
  4.     //С использованием текущего пула и последовательности SequenceEnumerable.
  5.     //Рассматривается только метод RunAll()
  6.     //5 условной конструкции
  7.     //1 математическая операция увеличения числа на 1
  8.     //Общий итог: 6
  9.     internal class SequenceLinkedPool : ISequencePool
  10.     {
  11.         private LinkedPoolNodeBase _currentNode;
  12.  
  13.         private LinkedPoolNodeBase _rootNode;
  14.  
  15.         public void Add(ISequence sequence)
  16.         {
  17.             if (_rootNode != default) _currentNode = new LinkedPoolNodeBase(sequence, _currentNode);
  18.             else _currentNode = _rootNode = new LinkedPoolNodeBase(sequence);
  19.         }
  20.  
  21.         public void Remove(ISequence sequence) => RemoveInternal(sequence);
  22.  
  23.         public void RunAll() => _rootNode?.Run();
  24.  
  25.         private void RemoveInternal(ISequence sequence)
  26.         {
  27.             LinkedPoolNodeBase currentNode = _rootNode;
  28.  
  29.             while (currentNode != default)
  30.             {
  31.                 if (currentNode.Source == sequence)
  32.                 {
  33.                     DropInternal(currentNode);
  34.                     break;
  35.                 }
  36.  
  37.                 currentNode = currentNode.Next as LinkedPoolNodeBase;
  38.             }
  39.         }
  40.  
  41.         private void DropInternal(LinkedPoolNodeBase linkedPoolNode)
  42.         {
  43.             if (linkedPoolNode == _rootNode)
  44.             {
  45.                 _rootNode = linkedPoolNode.Next as LinkedPoolNodeBase;
  46.  
  47.                 if (_rootNode != default) _rootNode.Previous = default;
  48.             }
  49.             else if (linkedPoolNode.Previous is LinkedPoolNodeBase previousNode)
  50.             {
  51.                 previousNode.Next = linkedPoolNode.Next;
  52.  
  53.                 if (linkedPoolNode == _currentNode) _currentNode = linkedPoolNode.Previous as LinkedPoolNodeBase;
  54.             }
  55.         }
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement