public void Add(int value) { next = (XorLinkedListNode *)Marshal.AllocHGlobal(sizeof(XorLinkedListNode)); next->SetValue(value); if (prev == null) { curr->SetBoth((XorLinkedListNode *)(0 ^ (ulong)next)); } else { curr->SetBoth((XorLinkedListNode *)((ulong)prev ^ (ulong)next)); } prev = curr; curr = next; tail = curr; }
public bool MoveNext() { if (curr == null) { curr = head; return(true); } if (curr == tail) { return(false); } XorLinkedListNode *old = curr; curr = XorLinkedList.Xor(prev, old->GetBoth()); prev = old; return(true); }
public static XorLinkedListNode *Xor(XorLinkedListNode *previous, XorLinkedListNode *prevXORnext) { return((XorLinkedListNode *)((ulong)previous ^ (ulong)prevXORnext)); }
public XorLinkedList(int value) { curr = (XorLinkedListNode *)Marshal.AllocHGlobal(sizeof(XorLinkedListNode)); this.head = curr; curr->SetValue(value); }
public void SetBoth(XorLinkedListNode *xor) { both = xor; }
public XorLinkedListNode(int value) { this.value = value; both = null; }
public void Reset() { curr = head; }
public XorListEnumerator(XorLinkedListNode *head, XorLinkedListNode *tail) { this.head = head; this.curr = null; this.tail = tail; }