Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

Obsah / Utility / HASH / Zrušení položky ze seznamu

Zdrojový kód: INCLUDE\UTIL\HASH.INC, UTIL\HASH.ASM


Zrušení položky ze seznamu


; -----------------------------------------------------------------------------
;                         Delete entry from hash list
; -----------------------------------------------------------------------------
; INPUT:	EAX = hash list entry
; -----------------------------------------------------------------------------

; ------------- Push registers

HashDel:	push	ebx		; push EBX
		push	ecx		; push ECX

; ------------- Get next (-> ECX) and previous (-> EBX) entry

		mov	ecx,[eax+HASHE_Next] ; ECX <- next entry
		mov	ebx,[eax+HASHE_Prev] ; EBX <- previous entry

; ------------- Link next entry with previous entry

		mov	[ebx+HASHE_Next],ecx ; link next entry to previous one
		jecxz	HashDel2	; no next entry
		mov	[ecx+HASHE_Prev],ebx ; link previous entry to next one
		
; ------------- Pop registers

HashDel2:	pop	ecx		; pop ECX
		pop	ebx		; pop EBX
		ret

Při zrušení položky ze seznamu je funkci HashDel předán v registru EAX ukazatel na rušenou položku (resp. ukazatel na popisovač hashovaného seznamu v položce).

Nejdříve jsou uchovány registry EBX a ECX. Poté je do registru ECX načten z rušené položky ukazatel na následující položku (ukazatel může být nulový) a do registru EBX ukazatel na předcházející položku (může jí být záhlaví).

Nyní je potřeba vzájemně propojit předcházející a následující položku. Do proměnné HASHE_Next předcházející položky je uložen ukazatel na následující položku. Předcházející položkou může být záhlaví seznamu, v tom případě bude ukazatel uložen do proměnné HASHH_First záhlaví seznamu a následující položka se stane novou první položkou seznamu. Pokud nenásleduje žádná další položka (tj. ukazatel na následující položku, který je v registru ECX, je nulový), přeskočí se operace nastavení ukazatele do následující položky. Jinak se do proměnné HASHE_Prev následující položky uloží ukazatel na předcházející položku (nebo na záhlaví seznamu).


Obsah / Utility / HASH / Zrušení položky ze seznamu