public override int Distance(k_Iterator ak_Iter) { k_NodeIterator lk_Iter = (k_NodeIterator)ak_Iter; k_Iterator lk_End = mk_List.End; int li_KeyDiff; if (this == lk_End || ak_Iter == lk_End) { li_KeyDiff = (this == lk_End && this != ak_Iter) ? 1 : 0; } else { li_KeyDiff = mk_List.mk_Comparer.Compare(mk_Current.Key, lk_Iter.mk_Current.Key); } if (li_KeyDiff <= 0) { int li_Diff = 0; k_Iterator lk_Bck = this.Clone(); for (; lk_Bck != lk_Iter && lk_Bck != lk_End; lk_Bck.Next()) { --li_Diff; } if (lk_Bck == lk_Iter) { return(li_Diff); } } if (li_KeyDiff >= 0) { int li_Diff = 0; k_Iterator lk_Fwd = lk_Iter.Clone(); for (; lk_Fwd != this && lk_Fwd != lk_End; lk_Fwd.Next()) { ++li_Diff; } if (lk_Fwd == this) { return(li_Diff); } } throw new Exception("Inconsistent state. Concurrency?"); }
public override int Distance(k_Iterator ak_Iter) { k_NodeIterator lk_Iter = (k_NodeIterator)ak_Iter; if (!this.IsValid || !lk_Iter.IsValid) { throw new ArgumentException("Iterator is invalid."); } int li_Diff = 0; k_Iterator lk_End = mk_List.End; k_Iterator lk_Fwd = lk_Iter.Clone(); for (; lk_Fwd != this && lk_Fwd != lk_End; lk_Fwd.Next()) { ++li_Diff; } if (lk_Fwd == this) { return(li_Diff); } li_Diff = 0; k_Iterator lk_Bck = this.Clone(); for (; lk_Bck != lk_Iter && lk_Bck != lk_End; lk_Bck.Next()) { --li_Diff; } if (lk_Bck == lk_Iter) { return(li_Diff); } throw new Exception("Inconsistent state. Concurrency?"); }