Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace UnEx_Sequences.Internal.Experimental.Linked
- {
- //Этот алгоритм не оправдал ожидания, нужно пересмотреть алгоритмы и придумать наиболее эффективный.
- //С использованием текущего пула и последовательности SequenceEnumerable.
- //Рассматривается только метод RunAll()
- //5 условной конструкции
- //1 математическая операция увеличения числа на 1
- //Общий итог: 6
- internal class SequenceLinkedPool : ISequencePool
- {
- private LinkedPoolNodeBase _currentNode;
- private LinkedPoolNodeBase _rootNode;
- public void Add(ISequence sequence)
- {
- if (_rootNode != default) _currentNode = new LinkedPoolNodeBase(sequence, _currentNode);
- else _currentNode = _rootNode = new LinkedPoolNodeBase(sequence);
- }
- public void Remove(ISequence sequence) => RemoveInternal(sequence);
- public void RunAll() => _rootNode?.Run();
- private void RemoveInternal(ISequence sequence)
- {
- LinkedPoolNodeBase currentNode = _rootNode;
- while (currentNode != default)
- {
- if (currentNode.Source == sequence)
- {
- DropInternal(currentNode);
- break;
- }
- currentNode = currentNode.Next as LinkedPoolNodeBase;
- }
- }
- private void DropInternal(LinkedPoolNodeBase linkedPoolNode)
- {
- if (linkedPoolNode == _rootNode)
- {
- _rootNode = linkedPoolNode.Next as LinkedPoolNodeBase;
- if (_rootNode != default) _rootNode.Previous = default;
- }
- else if (linkedPoolNode.Previous is LinkedPoolNodeBase previousNode)
- {
- previousNode.Next = linkedPoolNode.Next;
- if (linkedPoolNode == _currentNode) _currentNode = linkedPoolNode.Previous as LinkedPoolNodeBase;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement