public T1 this[int index] { get { RBOrderedMultiTree <T1> multiTree = mTree as RBOrderedMultiTree <T1>; if (multiTree == null) { return(default(T1)); } RBOrderedTreeNode <T1> node = multiTree.GetByOrder(index); if (node != null) { return(node.Key); } return(default(T1)); } set { RBOrderedMultiTree <T1> multiTree = mTree as RBOrderedMultiTree <T1>; if (multiTree == null) { return; } RBOrderedTreeNode <T1> node = multiTree.GetByOrder(index); if (node != null) { multiTree.Remove(node); multiTree.Add(value); } } }
public T1 this[int index] { get { RBOrderedMultiTree <T1> mTree = this.mTree as RBOrderedMultiTree <T1>; if (mTree == null) { return(default(T1)); } RBOrderedTreeNode <T1> byOrder = mTree.GetByOrder(index); if (byOrder != null) { return(byOrder.Key); } return(default(T1)); } set { RBOrderedMultiTree <T1> mTree = this.mTree as RBOrderedMultiTree <T1>; if (mTree == null) { return; } RBOrderedTreeNode <T1> byOrder = mTree.GetByOrder(index); if (byOrder == null) { return; } mTree.Remove(byOrder); mTree.Add(value); } }
public int IndexOf(T1 item) { RBOrderedMultiTree <T1> multiTree = mTree as RBOrderedMultiTree <T1>; if (multiTree == null) { return(-1); } RBOrderedTreeNode <T1> node = multiTree.Find(item); return(multiTree.GetOrder(node)); }
public int GetOrder(RBOrderedTreeNode <T> aItem) { RBTreeNodeBase <T, RBOrderedNodeParam> rbTreeNodeBase = (RBTreeNodeBase <T, RBOrderedNodeParam>)aItem; int mRank = rbTreeNodeBase.mParam.mRank; for (; rbTreeNodeBase.mParent != null; rbTreeNodeBase = rbTreeNodeBase.mParent) { if (rbTreeNodeBase.mParent.mRight == rbTreeNodeBase) { mRank += rbTreeNodeBase.mParent.mParam.mRank; } } return(mRank - 1); }
public void RemoveAt(int index) { RBOrderedMultiTree <T1> mTree = this.mTree as RBOrderedMultiTree <T1>; if (mTree == null) { return; } RBOrderedTreeNode <T1> byOrder = mTree.GetByOrder(index); if (byOrder == null) { return; } mTree.Delete((RBTreeNodeBase <T1, RBOrderedNodeParam>)byOrder); }
public int IndexOf(T1 item) { RBOrderedMultiTree <T1> mTree = this.mTree as RBOrderedMultiTree <T1>; if (mTree == null) { return(-1); } RBOrderedTreeNode <T1> aItem = mTree.Find(item); if (aItem == null) { return(-1); } return(mTree.GetOrder(aItem)); }
public void RemoveAt(int index) { RBOrderedMultiTree <T1> multiTree = mTree as RBOrderedMultiTree <T1>; if (multiTree == null) { return; } RBOrderedTreeNode <T1> node = multiTree.GetByOrder(index); if (node != null) { multiTree.Delete(node); } }
///<summary> ///Get order index of item ///This operation is O(logN) operation ///</summary> public int GetOrder(RBOrderedTreeNode <T> aItem) { RBTreeNodeBase <T, RBOrderedNodeParam> node = aItem; int idx = node.mParam.mRank; while (true) { if (node.mParent == null) { break; } if (node.mParent.mRight == node) { idx += node.mParent.mParam.mRank; } node = node.mParent; } return(idx - 1); }