Flávio Etrusco schreef op 12 mrt '13:
On 3/11/13, Darius Blaszyk
> I'm stuck porting a macro from
C. Below is the original define. The part I'm struggeling with is the right most part after the - sign. #define GETNEXT(x) ((LList *)(((char *) x) - ((char *) & (((LList *)0)^.next)))) Does anyone know what is meant with the define? Obviously LList is a linked list struct that has a prev and next variable. But what does the & and 0 mean? Appreciate any help. Regards, Darius
AFAICS they mean "address" and "nil",
respectively, so that part will
return the offset of "next" inside and
item of LList.
-Flávio
So here is what I made based on your and
Henry's mail. However still it does not seem to work, although other ported code might be at fault of course :)
//#define GETNEXT(x) ((LList
*)(((char *) x) - ((char *) & (((LList *)0)->.next))))
function
GETNEXT(x: pLList): pLList; inline;
begin
exit(pLList(pchar(x) -
pchar(pLList(nil)^.next)));
end;
And let LList be declared as:
LList
= record
len: integer;
next, prev: pLList;
name: PChar;
nextname:
PChar;
flag: integer;
end;
Then I still don't understand what this
does:
if list^.next nil then
list^.nextname :=
GETNEXT(list^.next)^.name;
Regards, Darius