diff --git a/seminar/treelib.py b/seminar/treelib.py index f890868b..a64c86d9 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -181,10 +181,44 @@ def create_node_before(some, arguments, but, i, dont, know, which, yet): def swap(node, other): raise NotImplementedError("YAGNI (You aren't gonna need it).") -def swap_pred(node): +# Exception, kterou některé metody při špatném použití mohou házet +# Hlavní důvod je možnost informovat o selhání, aby se příslušný problém dal zobrazit na frontendu, +class TreeLibError(RuntimeError): pass + +def swap_pred(node): + if node is None: + raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") + pred = safe_pred(node) + if pred is None: + raise TreeLibError("Nelze posunout vlevo, není tam žádný další uzel.") + pre_pred = safe_pred(pred) + succ = node.succ + + if pre_pred is not None: + pre_pred.succ = node + pre_pred.save() + node.succ = pred + node.save() + pred.succ = succ + pred.save() + def swap_succ(node): - pass + if node is None: + raise TreeLibError("Nelze přesunout None. Tohle by se nemělo stát.") + succ = node.succ + if succ is None: + raise TreeLibError("Nelze posunout vpravo, není tam žádný další uzel") + pred = safe_pred(node) + post_succ = succ.succ + + if pred is not None: + pred.succ = succ + pred.save() + succ.succ = node + succ.save() + node.succ = post_succ + node.save() # Rotace stromu # Dokumentace viz wiki: