Beispiel #1
0
        public void TestNextLowerItem()
        {
            var alist = new SparseAList <int>(_maxLeafSize, _maxInnerSize);
            int?i;

            for (i = 0; i < 100; i++)
            {
                alist.Add(i.Value);
                alist.InsertSpace(alist.Count, 1000);
            }
            i = int.MaxValue;
            Assert.AreEqual(alist.NextLowerItem(ref i), 99);
            Assert.AreEqual(i.Value, 99099);
            i = 99100;
            Assert.AreEqual(alist.NextLowerItem(ref i), 99);
            Assert.AreEqual(i.Value, 99099);
            Assert.AreEqual(alist.NextLowerItem(ref i), 98);
            Assert.AreEqual(i.Value, 98098);
            i = 55555;
            Assert.AreEqual(alist.NextLowerItem(ref i), 55);
            Assert.AreEqual(i.Value, 55055);
            i = 1002;
            Assert.AreEqual(alist.NextLowerItem(ref i), 1);
            Assert.AreEqual(i.Value, 1001);
            Assert.AreEqual(alist.NextLowerItem(ref i), 0);
            Assert.AreEqual(i.Value, 0);
            i = 1;
            Assert.AreEqual(alist.NextLowerItem(ref i), 0);
            Assert.AreEqual(i.Value, 0);
            Assert.AreEqual(alist.NextLowerItem(ref i), default(int));
            Assert.AreEqual(i.HasValue, false);
            i = int.MinValue;
            Assert.AreEqual(alist.NextLowerItem(ref i), default(int));
            Assert.AreEqual(i.HasValue, false);

            // Place a value at the edge of integer space
            alist.Clear();
            alist.InsertSpace(0, int.MaxValue - 1);
            alist.Add(777);
            i = int.MinValue;
            Assert.AreEqual(alist.NextLowerItem(ref i), default(int));
            Assert.AreEqual(i.HasValue, false);
            i = int.MaxValue;
            Assert.AreEqual(alist.NextLowerItem(ref i), default(int));
            Assert.AreEqual(i.HasValue, false);
            i = null;
            Assert.AreEqual(alist.NextLowerItem(ref i), 777);
            Assert.AreEqual(i.Value, int.MaxValue);
        }
        void TextBufferChanged(int position, int newLength, int dif)
        {
            int startLex = Math.Max(position - _lookahead, 0);

            EnsureLexed(Buffer.CurrentSnapshot, startLex);

            if (dif > 0)
            {
                _tokens.InsertSpace(position, dif);
            }
            else if (_tokens.Count > position)
            {
                _tokens.RemoveRange(position, Math.Min(-dif, _tokens.Count - position));
            }

            int endLex = position + newLength + _lookahead;

            endLex   = _tokens.NextHigherIndex(endLex - 1) ?? _tokens.Count;
            startLex = _tokens.NextLowerIndex(startLex + 1) ?? 0;

            _lexer = PrepareLexer(_lexer, _wrappedBuffer, startLex);
            int stoppedAt = RunLexerUntil(endLex);

            if (ClassificationChanged != null)
            {
                var span = new SnapshotSpan(Buffer.CurrentSnapshot, new Span(startLex, stoppedAt - startLex));
                ClassificationChanged(this, new ClassificationChangedEventArgs(span));
            }
        }
Beispiel #3
0
        protected SparseAList <int> NewList(int initialCount, int realCount, out List <int> list)
        {
            Debug.Assert(realCount <= initialCount);
            SparseAList <int> alist = NewList();

            list = new List <int>();

            // Make a list of random size <= initialCount
            for (int i = 0; i < realCount; i++)
            {
                AddToBoth(alist, list, i, i);
            }

            // Add empty spaces until Count == initialCount
            while (alist.Count < initialCount)
            {
                int i = _r.Next(alist.Count + 1);
                alist.InsertSpace(i);
                list.Insert(i, 0);
            }

            return(alist);
        }
Beispiel #4
0
        SparseAList <int> NewList(int start, int count, ListChangingHandler <int> observer, out List <int> list)
        {
            var alist = new SparseAList <int>(_maxLeafSize, _maxInnerSize);

            list = new List <int>();
            for (int i = 0; i < count; i++)
            {
                if (_r.Next(2) == 0)
                {
                    alist.Add(start + i);
                    list.Add(start + i);
                }
                else
                {
                    alist.InsertSpace(i);
                    list.Add(0);
                }
            }
            if (observer != null)
            {
                alist.ListChanging += observer;
            }
            return(alist);
        }