return e
}
+// move moves e to next to at and returns e.
+func (l *List) move(e, at *Element) *Element {
+ if e == at {
+ return e
+ }
+ e.prev.next = e.next
+ e.next.prev = e.prev
+
+ n := at.next
+ at.next = e
+ e.prev = at
+ e.next = n
+ n.prev = e
+
+ return e
+}
+
// Remove removes e from l if e is an element of list l.
// It returns the element value e.Value.
// The element must not be nil.
return
}
// see comment in List.Remove about initialization of l
- l.insert(l.remove(e), &l.root)
+ l.move(e, &l.root)
}
// MoveToBack moves element e to the back of list l.
return
}
// see comment in List.Remove about initialization of l
- l.insert(l.remove(e), l.root.prev)
+ l.move(e, l.root.prev)
}
// MoveBefore moves element e to its new position before mark.
if e.list != l || e == mark || mark.list != l {
return
}
- l.insert(l.remove(e), mark.prev)
+ l.move(e, mark.prev)
}
// MoveAfter moves element e to its new position after mark.
if e.list != l || e == mark || mark.list != l {
return
}
- l.insert(l.remove(e), mark)
+ l.move(e, mark)
}
// PushBackList inserts a copy of an other list at the back of list l.