LT GetNext(IteratorPointer item) { return ((LT)item).link.next; }
LT GetData(IteratorPointer pointer) { return (LT)pointer; }
- IteratorPointer GetAtPosition(I pos, bool create)
+ IteratorPointer GetAtPosition(const I pos, bool create, bool * justAdded)
{
int c;
LT item;
if(item)
{
item.link.prev = last;
- if(item.link.prev)
+ if(item.link.prev)
item.link.prev.link.next = item;
if(!first) first = item;
last = item;
item.link.prev.link.next = item;
else
item.link.next = item;
- }
+ }
}
if(prevItem == last) last = item;
if(item.link.next)
{
if(item.link.prev)
item.link.prev.link.next = item.link.next;
- if(item.link.next)
+ if(item.link.next)
item.link.next.link.prev = item.link.prev;
if(circ && last == first)
last = first = null;
LT prevItem = (LT)_prevItem;
if(item)
{
- if(prevItem != item && (first != item || prevItem))
+ if(prevItem != item && (first != item || prevItem))
{
- if(item.link.prev)
+ if(item.link.prev)
item.link.prev.link.next = item.link.next;
- if(item.link.next)
+ if(item.link.next)
item.link.next.link.prev = item.link.prev;
if(item == first) first = item.link.next;
if(item == last) last = item.link.prev;
-
- if(prevItem == last)
+
+ if(prevItem == last)
last = item;
-
+
+ item.link.prev = prevItem ? prevItem : (circ ? last : null);
if(prevItem)
{
item.link.next = prevItem.link.next;
{
item.link.next = first;
first = item;
+ if(circ)
+ {
+ if(item.link.prev)
+ item.link.prev.link.next = item;
+ else
+ item.link.next = item;
+ }
}
- item.link.prev = prevItem;
- if(item.link.next)
+ if(item.link.next)
item.link.next.link.prev = item;
}
}
void Free()
{
LT item;
- while(item = first)
+ while((item = first))
{
Remove(item);
delete item;