mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-23 15:38:18 -08:00
Updated SimpleList
This commit is contained in:
@@ -281,36 +281,48 @@ void SimpleList<T>::swap(int x, int y){
|
|||||||
x = y;
|
x = y;
|
||||||
y = h;
|
y = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Example: a -> b -> c -> ... -> g -> h -> i
|
|
||||||
// we want to swap b with h
|
|
||||||
Node<T>* nodeA = getNode(x - 1); // x.prev
|
|
||||||
Node<T>* nodeB = getNode(x); // x
|
|
||||||
Node<T>* nodeC = getNode(x + 1); // x.next
|
|
||||||
Node<T>* nodeG = y - 1 == x ? nodeB : getNode(y - 1); // y.prev
|
|
||||||
Node<T>* nodeH = getNode(y); // y
|
|
||||||
Node<T>* nodeI = getNode(y + 1); // y.next
|
|
||||||
|
|
||||||
// a -> h -> i b -> c -> ... -> g -> h -> i
|
// When data is small, copy it
|
||||||
if(nodeA)
|
if(sizeof(T) < 24){
|
||||||
nodeA->next = nodeH;
|
Node<T>* nodeA = getNode(x);
|
||||||
else
|
Node<T>* nodeB = getNode(y);
|
||||||
listBegin = nodeH;
|
T h = nodeA->data;
|
||||||
|
nodeA->data = nodeB->data;
|
||||||
|
nodeB->data = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
// otherwise change the pointers
|
||||||
|
else {
|
||||||
|
// Example: a -> b -> c -> ... -> g -> h -> i
|
||||||
|
// we want to swap b with h
|
||||||
|
Node<T>* nodeA = getNode(x - 1); // x.prev
|
||||||
|
Node<T>* nodeB = getNode(x); // x
|
||||||
|
Node<T>* nodeC = getNode(x + 1); // x.next
|
||||||
|
Node<T>* nodeG = y - 1 == x ? nodeB : getNode(y - 1); // y.prev
|
||||||
|
Node<T>* nodeH = getNode(y); // y
|
||||||
|
Node<T>* nodeI = getNode(y + 1); // y.next
|
||||||
|
|
||||||
|
// a -> h -> i b -> c -> ... -> g -> h -> i
|
||||||
|
if(nodeA)
|
||||||
|
nodeA->next = nodeH;
|
||||||
|
else
|
||||||
|
listBegin = nodeH;
|
||||||
|
|
||||||
|
// a -> h -> c -> ... -> g -> h -> i b -> i
|
||||||
|
if(nodeH != nodeC) // when nodes between b and h exist
|
||||||
|
nodeH->next = nodeC;
|
||||||
|
else
|
||||||
|
nodeH->next = nodeB;
|
||||||
|
|
||||||
// a -> h -> c -> ... -> g -> h -> i b -> i
|
// a -> h -> i b -> i
|
||||||
if(nodeH != nodeC) // when nodes between b and h exist
|
nodeB->next = nodeI;
|
||||||
nodeH->next = nodeC;
|
if(!nodeI)
|
||||||
else
|
listEnd = nodeB;
|
||||||
nodeH->next = nodeB;
|
|
||||||
|
// a -> h -> c -> ... -> g -> b -> i
|
||||||
// a -> h -> i b -> i
|
if(nodeG != nodeB) // when more than 1 nodes between b and h exist
|
||||||
nodeB->next = nodeI;
|
nodeG->next = nodeB;
|
||||||
if(!nodeI)
|
}
|
||||||
listEnd = nodeB;
|
|
||||||
|
|
||||||
// a -> h -> c -> ... -> g -> b -> i
|
|
||||||
if(nodeG != nodeB) // when more than 1 nodes between b and h exist
|
|
||||||
nodeG->next = nodeB;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user