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: | ||||
| 		print_tree(node.succ, indent=indent) | ||||
| 
 | ||||
| ## Rodinné vztahy | ||||
| def get_parent(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é... | ||||
| # Django je trošku hloupé, takže node.prev nevrací None, ale hází django.core.exceptions.ObjectDoesNotExist | ||||
| def safe_pred(node): | ||||
| 	try: | ||||
| 		return node.father_of_first | ||||
| 		return node.prev | ||||
| 	except ObjectDoesNotExist: | ||||
| 		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é) | ||||
| def general_next(node): | ||||
| 	# Máme potomka? | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel 'LEdoian' Turinsky
						Pavel 'LEdoian' Turinsky