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
	
	 Pavel 'LEdoian' Turinsky
						Pavel 'LEdoian' Turinsky