Obsah / Utility / HASH / Přidání položky do seznamu
Zdrojový kód: INCLUDE\UTIL\HASH.INC, UTIL\HASH.ASM
Přidání položky do seznamu
|
Funkce HashAdd slouží k vložení nové položky na začátek hashovaného seznamu. Jako vstupní parametr je funkci předán v registru EAX ukazatel na nově vkládanou položku (přesněji ukazatel na popisovač hashovaného seznamu vkládané položky). V registru EBX je ukazatel na záhlaví hashovaného seznamu.
Po úschově registru ECX se provede připojení první položky seznamu a záhlaví seznamu k nové položce. Do registru ECX se ze záhlaví seznamu načte ukazatel na první položku seznamu, ukazatel se uloží do proměnné HASHE_Next nově vkládané položky, bude tedy jejím následujícím prvkem. V tomto okamžiku nevadí, je-li ukazatel na první položku nulový. Další instrukcí se uloží ukazatel na záhlaví (tedy na jeho proměnnou HASHH_First) do proměnné HASHE_Prev nové vkládané položky, záhlaví bude tedy jejím předcházejícím prvkem.
Následuje připojení nové položky k původní první položce seznamu a k záhlaví seznamu. Ukazatel na původní první položku seznamu je uložen v registru ECX. Může být nulový (tj. není žádná první položka), proto je operace uložení ukazatele přeskočena v případě nulového ukazatele. Jinak je ukazatel na novou položku uložen do proměnné HASHE_Prev původní první položky, nová položka tedy bude předcházejícím prvkem původní první položky. Dále je ukazatel na nově vloženou položku uložen do proměnné HASHH_First záhlaví seznamu, nová položka tedy bude novou první položkou seznamu.
Funkce slouží současně k vložení nové položky seznamu za jinou položku (návěští HashAddAfter). Registr EAX opět obsahuje ukazatel na nově vkládanou položku, v registru EBX je ukazatel na jinou položku seznamu. Nutnou podmínkou je, že offsety proměnných HASHH_First (ve struktuře HASHH) a HASHE_Next (ve struktuře HASHE) se musí shodovat, tj. proměnné musí být umístěny na začátku struktur.
|
Funkce HashAddBefore slouží k vložení nové položky před jinou položku. Jako vstupní parametr je funkci předán v registru EAX ukazatel na nově vkládanou položku (přesněji ukazatel na popisovač hashovaného seznamu vkládané položky). V registru EBX je ukazatel na jinou položku seznamu.
Po úschově registru ECX se provede připojení předešlé položky (nebo záhlaví seznamu) a jiné položky k nové položce. Z proměnné HASHE_Prev jiné položky se do registru ECX načte ukazatel na předešlou položku (nebo záhlaví). Ukazatel na jinou položku se uloží do proměnné HASHE_Next nové položky, jiná položka tedy bude následující položkou za nově vkládanou položkou. Ukazatel na předešlou položku (nebo záhlaví) se uloží do proměnné HASHE_Prev nové položky.
Následuje připojení nové položky k jiné položce a k předešlé položce (nebo k záhlaví). Na rozdíl od předešlé funkce není třeba rozlišovat, zda není některý ukazatel nulový (nemůže být). Ukazatel na nově vkládanou položku se uloží do proměnné HASHE_Prev jiné položky (nová položka bude její předcházející položkou) a do proměnné HASHE_Next předcházející položky (nová položka bude její následující položkou). Předcházející položkou přitom může být záhlaví, v tím případě se ukazatel na novou položku uloží do proměnné HASHH_First položky záhlaví a nová položka se stane první položkou seznamu.
Obsah / Utility / HASH / Přidání položky do seznamu