コード例 #1
0
        private int InnerAddOrReplace(Type key, Delegate value, Func <Type, Delegate> valueCreator)
        {
            var previousIndex = -1;
            var currentIndex  = headIndex;

            while (currentIndex != -1)
            {
                var current = items[currentIndex];

                if (IsMatch(current.Key, key))
                {
                    if (current.Key == key)
                    {
                        items[currentIndex] = current.With(value: value);
                        return(currentIndex);
                    }
                    break;
                }
                previousIndex = currentIndex;
                currentIndex  = current.NextElementIndex;
            }

            var newItem = new SwapListItem(key, value, valueCreator, items.Count);

            if (previousIndex == -1)
            {
                newItem.NextElementIndex = headIndex;
                headIndex = newItem.Id;
            }
            else
            {
                newItem.NextElementIndex = items[previousIndex].NextElementIndex;
                items[previousIndex]     = items[previousIndex].With(nextElementIndex: newItem.Id);
            }
            items.Add(newItem);
            return(newItem.Id);
        }
コード例 #2
0
ファイル: SwapList.cs プロジェクト: antmicro/Migrant
        private int InnerAddOrReplace(Type key, Delegate value, Func<Type, Delegate> valueCreator)
        {
            var previousIndex = -1;
            var currentIndex = headIndex;
            while(currentIndex != -1)
            {
                var current = items[currentIndex];

                if(IsMatch(current.Key, key))
                {
                    if(current.Key == key)
                    {
                        items[currentIndex] = current.With(value: value);
                        return currentIndex;
                    }
                    break;
                }
                previousIndex = currentIndex;
                currentIndex = current.NextElementIndex;
            }

            var newItem = new SwapListItem(key, value, valueCreator, items.Count);
            if(previousIndex == -1)
            {
                newItem.NextElementIndex = headIndex;
                headIndex = newItem.Id;
            }
            else
            {
                newItem.NextElementIndex = items[previousIndex].NextElementIndex;
                items[previousIndex] = items[previousIndex].With(nextElementIndex: newItem.Id);
            }
            items.Add(newItem);
            return newItem.Id;
        }