3 import "instance" // TOFIX: This is required to build Debug on Ubuntu 10.04, GCC 4.4.3
6 public class Link : ListItem
13 public class List<class LLT> : LinkList<Link, T = LLT, D = LLT>
16 // Generic iterator support
17 LLT GetData(Link link)
19 return link ? ((class(LLT) && class(LLT).type == structClass) ? (LLT)&link.data : (LLT)link.data) : (LLT)0;
22 bool SetData(Link link, LLT value)
24 if(class(LLT).type == structClass)
25 memcpy((void *)&link.data, (void *)(uintptr)value, class(LLT).structSize);
27 link.data = (uint64)value;
31 Link Insert(Link after, LLT value)
34 Class cLLT = class(LLT);
35 if(cLLT && cLLT.type == structClass)
37 uint sType = cLLT.structSize;
38 link = (Link)new0 byte[sizeof(class ListItem) + sType];
39 memcpy((void *)&link.data, (void *)value, sType);
43 // TOFIX: This allocates too much data?
44 // link = Link { data = (uint64)value };
45 link = (Link)new0 byte[sizeof(class ListItem) + sizeof(uint64)];
46 link.data = (uint64)value;
48 LinkList::Insert(after, (LT)link);
54 return (Link)Insert(last, value);
57 void Remove(Link link)
59 LinkList::Remove(link);
63 void Delete(Link link)
65 D data = GetData(link);
75 D data = GetData(item);
81 Link Find(const LLT value)
83 return (Link)Container::Find(value);