Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }