Hi!!
I'm trying to put some order in my code.
One thing I see is I'd make some changes to ObjAsm32, and that make my code not portable, so now I'm moving that modifications inside the projects.
An almost indispensable LinkedList method is Clear (the same that Done but without Done and pFirstNode= NULL). Perhaps that method must be included in a next ObjAsm32 version.
Regards. HSE
Hi HSE
Thanks for the contribution. I'll add it for the next release.
Biterider
Hi
I reformulate Clear and Done methods a bit. Waht do you think about these changes?
Biterider
Hi Biterider!
Clear must left NULL in pFirstNode. Perhaps a more robust method also need to left NULL in pLastNode and pCurrentNode, and 0 in dCount, but I only evaluate pFirstNode (method Append also evaluate pFirstNode). If pFirstNode is NULL then LinkedList is empty. I have never used dCount, but I'm seeing now, perhaps is very usefull.
Thanks. HSE
LATER: Apparently ecx need to be preserved.
Hi HSE
You are correct. I would suggest to change the resetting block to the top to avoid the push/pop ecx like
Method LinkedList.Clear, uses esi
SetObject ecx
mov esi, [ecx].LinkedList.pFirstNode
mov [ecx].dCount, 0
mov [ecx].pFirstNode, NULL
mov [ecx].pLastNode, NULL
mov [ecx].pCurrentNode, NULL
.while esi != NULL
Destroy [esi].LINKED_NODE.pObject ;Save dispose of linked Object
push [esi].LINKED_NODE.pLinkFwrd ;Preserve address of next node
MemFree esi ;Free the linked node
pop esi ;Restore address of next node
.endw
MethodEnd
Biterider
Perfect :t I noted that a minute later (later to last "later"!), but I don't saw for a year.
Hallo,
can this code be adapted to a 64 bit system? I would like to use a linked list for the 64 bit system, but dont know if I can use ObjAsm.
Regards
Hi LiaoMi!
64 bit: I don't know.
If you need to develop a OOP project you can try ObjAsm.
See http://masm32.com/board/index.php?topic=4287.0
In particular http://masm32.com/board/index.php?topic=4287.msg45798#msg45798
You can build a LinkedList in plain MASM
Quote from: HSE on May 18, 2016, 07:52:00 AM
Hi LiaoMi!
64 bit: I don't know.
If you need to develop a OOP project you can try ObjAsm.
See http://masm32.com/board/index.php?topic=4287.0
In particular http://masm32.com/board/index.php?topic=4287.msg45798#msg45798
You can build a LinkedList in plain MASM
Hi HSE!
Thank you very much, this theme really helped me!
Two new methods:
; ——————————————————————————————————————————————————
; Method: LinkedList.Clean
; Purpose: Free all allocated resources.
; Arguments: None.
; Return: Nothing.
Method LinkedList.Clean, uses esi
SetObject ecx
mov esi, [ecx].LinkedList.pFirstNode
mov [ecx].pFirstNode, NULL
mov [ecx].pLastNode, NULL
mov [ecx].pCurrentNode, NULL
mov [ecx].dCount, 0
.while esi != NULL
push [esi].LINKED_NODE.pLinkFwrd ;Preserve address of next node
MemFree esi ;Free the linked node
pop esi ;Restore address of next node
.endw
MethodEnd
; ——————————————————————————————————————————————————
; Method: LinkedList.DoneClean
; Purpose: Finalize the LinkedList object and free all allocated
; resources.
; Arguments: None.
; Return: Nothing.
Method LinkedList.DoneClean
OCall Clean
ACall Done
MethodEnd
These are usefull when using LinkedList to store dwords instead pointers(I'm storing commands). In that case Clear throw errors because there is no objects to destroy.