private JSONParseItem GetItemBeforePosition(int pos, JSONComplexItem parentItem)
        {
            JSONParseItem     item     = null;
            JSONParseItemList children = parentItem.Children;
            int start = 0;

            if (children.Any())
            {
                start = children[0].Start;
            }

            if (start < pos)
            {
                int i = FindInsertIndex(children, pos, beforeExisting: true) - 1;

                if (i >= 0)
                {
                    item = children[i];

                    if (item is JSONComplexItem complexItem)
                    {
                        // Recurse to find the deepest item
                        item = GetItemBeforePosition(pos, complexItem);
                    }
                }
            }

            return(item);
        }
Ejemplo n.º 2
0
        [DataRow(170, 5)] // The last index
        public void JSONHelpers_FindInsertIndex_InvalidJson(int position, int expectedIndex)
        {
            JSONComplexItem   item  = JSONParser.Parse(_invalidJsonText).Children[0] as JSONComplexItem;
            JSONParseItemList items = item.Children;

            int actualIndex = JsonHelpers.FindInsertIndex(items, position);

            Assert.AreEqual(expectedIndex, actualIndex);
        }
        private JSONParseItem GetPreviousChild(JSONParseItem child, JSONParseItemList children)
        {
            int index = (child != null) ? children.IndexOf(child) : -1;

            if (index > 0)
            {
                return(children[index - 1]);
            }

            return(null);
        }
        private JSONParseItem GetNextChild(JSONParseItem child, JSONParseItemList children)
        {
            int index = (child != null) ? children.IndexOf(child) : -1;

            if (index != -1 && index + 1 < children.Count)
            {
                return(children[index + 1]);
            }

            return(null);
        }
        private int FindInsertIndex(JSONParseItemList jsonParseItems, int rangeStart, bool beforeExisting)
        {
            int min = 0;
            int max = jsonParseItems.Count - 1;

            while (min <= max)
            {
                int mid   = (min + max) / 2;
                int start = jsonParseItems[mid].Start;

                if (rangeStart < start || (beforeExisting && rangeStart == start))
                {
                    max = mid - 1;
                }
                else
                {
                    min = mid + 1;
                }
            }

            return(max + 1);
        }
Ejemplo n.º 6
0
        internal static int FindInsertIndex(JSONParseItemList jsonParseItems, int rangeStart)
        {
            int min = 0;
            int max = jsonParseItems.Count - 1;

            while (min <= max)
            {
                int mid   = (min + max) / 2;
                int start = jsonParseItems[mid].Start;

                if (rangeStart <= start)
                {
                    max = mid - 1;
                }
                else
                {
                    min = mid + 1;
                }
            }

            return(max + 1);
        }