int InsertIntoBranch(T item, out T pushItem, out BTreeNode <T> pushNode) { int min = 0; int max = elements.Count; while (min < max) { int check = (min + max) / 2; int result = func.Compare(item, elements[check]); if (result < 0) { max = check; } else if (result > 0) { min = check + 1; } else if (item is Item) { result = ItemData.Compare((Item)(object)item, (Item)(object)elements[check]); if (result < 0) { max = check; } else if (result > 0) { min = check + 1; } else { ((Item)(object)elements[check]).stack += ((Item)(object)item).stack; pushItem = default(T); pushNode = null; return(-1); } } else { min = check + 1; } } if (branches[min].Insert(item, out pushItem, out pushNode)) { return(min); } return(-1); }
private int InsertIntoBranch(Item item, out Item pushItem, out BTreeNode pushNode) { int min = 0; int max = elements.Count; while (min < max) { int check = (min + max) / 2; int result = func.Compare(item, elements[check]); if (result < 0) { max = check; } else if (result > 0) { min = check + 1; } else { result = ItemData.Compare(item, elements[check]); if (result < 0) { max = check; } else if (result > 0) { min = check + 1; } else { elements[check].stack += item.stack; pushItem = null; pushNode = null; return(-1); } } } if (branches[min].Insert(item, out pushItem, out pushNode)) { return(min); } return(-1); }
int InsertIntoElements(T item) { int min = 0; int max = elements.Count; while (min < max) { int check = (min + max) / 2; int result = func.Compare(item, elements[check]); if (result < 0) { max = check; } else if (result > 0) { min = check + 1; } else if (item is Item) { result = ItemData.Compare((Item)(object)item, (Item)(object)elements[check]); if (result < 0) { max = check; } else if (result > 0) { min = check + 1; } else { ((Item)(object)elements[check]).stack += ((Item)(object)item).stack; return(-1); } } else { min = check + 1; } } elements.Insert(min, item is Item ? (T)(object)((Item)(object)item).Clone() : item); return(min); }
private int InsertIntoElements(Item item) { int min = 0; int max = elements.Count; while (min < max) { int check = (min + max) / 2; int result = func.Compare(item, elements[check]); if (result < 0) { max = check; } else if (result > 0) { min = check + 1; } else { result = ItemData.Compare(item, elements[check]); if (result < 0) { max = check; } else if (result > 0) { min = check + 1; } else { elements[check].stack += item.stack; return(-1); } } } elements.Insert(min, item.Clone()); return(min); }