Example #1
0
 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;
 }
Example #2
0
                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);
                }
Example #3
0
 public static XorLinkedListNode *Xor(XorLinkedListNode *previous,
                                      XorLinkedListNode *prevXORnext)
 {
     return((XorLinkedListNode *)((ulong)previous ^ (ulong)prevXORnext));
 }
Example #4
0
 public XorLinkedList(int value)
 {
     curr      = (XorLinkedListNode *)Marshal.AllocHGlobal(sizeof(XorLinkedListNode));
     this.head = curr;
     curr->SetValue(value);
 }
Example #5
0
 public void SetBoth(XorLinkedListNode *xor)
 {
     both = xor;
 }
Example #6
0
 public XorLinkedListNode(int value)
 {
     this.value = value;
     both       = null;
 }
Example #7
0
 public void Reset()
 {
     curr = head;
 }
Example #8
0
 public XorListEnumerator(XorLinkedListNode *head, XorLinkedListNode *tail)
 {
     this.head = head;
     this.curr = null;
     this.tail = tail;
 }