TreeLib: Bezpečné varianty .pred a .father_of_first
This commit is contained in:
parent
9efb684cc1
commit
9a0664f6c2
1 changed files with 17 additions and 14 deletions
|
@ -10,24 +10,27 @@ def print_tree(node,indent=0):
|
||||||
if node.succ:
|
if node.succ:
|
||||||
print_tree(node.succ, indent=indent)
|
print_tree(node.succ, indent=indent)
|
||||||
|
|
||||||
## Rodinné vztahy
|
# Django je trošku hloupé, takže node.prev nevrací None, ale hází django.core.exceptions.ObjectDoesNotExist
|
||||||
def get_parent(node):
|
def safe_pred(node):
|
||||||
pass
|
|
||||||
# Nejdřív získáme prvního potomka...
|
|
||||||
# Django je trošku hloupé, takže node.prev nevrací None, ale hází django.core.exceptions.ObjectDoesNotExist
|
|
||||||
while True:
|
|
||||||
try:
|
|
||||||
node = node.prev
|
|
||||||
except ObjectDoesNotExist:
|
|
||||||
# We rely here on the fact that the assignment will not happen if RHS throws an exception
|
|
||||||
break
|
|
||||||
# ... a z prvního potomka umíme najít rodiče
|
|
||||||
# Django je pořád hloupé...
|
|
||||||
try:
|
try:
|
||||||
return node.father_of_first
|
return node.prev
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# A to samé pro .father_of_first
|
||||||
|
def safe_father_of_first(node):
|
||||||
|
return node.prev
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
return None
|
||||||
|
|
||||||
|
## Rodinné vztahy
|
||||||
|
def get_parent(node):
|
||||||
|
# Nejdřív získáme prvního potomka...
|
||||||
|
while safe_pred(node) is not None:
|
||||||
|
node = safe_pred(node)
|
||||||
|
# ... a z prvního potomka umíme najít rodiče
|
||||||
|
return safe_father_of_first(node)
|
||||||
|
|
||||||
# Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé)
|
# Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé)
|
||||||
def general_next(node):
|
def general_next(node):
|
||||||
# Máme potomka?
|
# Máme potomka?
|
||||||
|
|
Loading…
Reference in a new issue