当前位置: 首页>>代码示例>>C#>>正文


C# ArrayBuilder.Push方法代码示例

本文整理汇总了C#中ArrayBuilder.Push方法的典型用法代码示例。如果您正苦于以下问题:C# ArrayBuilder.Push方法的具体用法?C# ArrayBuilder.Push怎么用?C# ArrayBuilder.Push使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ArrayBuilder的用法示例。


在下文中一共展示了ArrayBuilder.Push方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: EmitAllElementInitializersRecursive

        /// <summary>
        /// Emits all initializers that match indices on the stack recursively.
        /// 
        /// Example: 
        ///  if array has [0..2, 0..3, 0..2] shape
        ///  and we have {1, 2} indices on the stack
        ///  initializers for 
        ///              [1, 2, 0]
        ///              [1, 2, 1]
        ///              [1, 2, 2]
        /// 
        ///  will be emitted and the top index will be pushed off the stack 
        ///  as at that point we would be completely done with emitting initializers 
        ///  corresponding to that index.
        /// </summary>
        private void EmitAllElementInitializersRecursive(ArrayTypeSymbol arrayType,
                                                         ArrayBuilder<IndexDesc> indices,
                                                         bool includeConstants)
        {
            var top = indices.Peek();
            var inits = top.Initializers;

            if (IsMultidimensionalInitializer(inits))
            {
                // emit initializers for the less significant indices recursively
                for (int i = 0; i < inits.Length; i++)
                {
                    indices.Push(new IndexDesc(i, ((BoundArrayInitialization)inits[i]).Initializers));
                    EmitAllElementInitializersRecursive(arrayType, indices, includeConstants);
                }
            }
            else
            {
                // leaf case
                for (int i = 0; i < inits.Length; i++)
                {
                    var init = inits[i];
                    if (ShouldEmitInitExpression(includeConstants, init))
                    {
                        // emit array ref
                        _builder.EmitOpCode(ILOpCode.Dup);

                        Debug.Assert(indices.Count == arrayType.Rank - 1);

                        // emit values of all indices that are in progress
                        foreach (var row in indices)
                        {
                            _builder.EmitIntConstant(row.Index);
                        }

                        // emit the leaf index
                        _builder.EmitIntConstant(i);

                        var initExpr = inits[i];
                        EmitExpression(initExpr, true);
                        EmitArrayElementStore(arrayType, init.Syntax);
                    }
                }
            }

            indices.Pop();
        }
开发者ID:GeertVL,项目名称:roslyn,代码行数:62,代码来源:EmitArrayInitializer.cs

示例2: EmitMultidimensionalElementInitializers

        private void EmitMultidimensionalElementInitializers(ArrayTypeSymbol arrayType,
                                                            ImmutableArray<BoundExpression> inits,
                                                            bool includeConstants)
        {
            // Using a List for the stack instead of the framework Stack because IEnumerable from Stack is top to bottom.
            // This algorithm requires the IEnumerable to be from bottom to top. See extensions for List in CollectionExtensions.vb.

            var indices = new ArrayBuilder<IndexDesc>();

            // emit initializers for all values of the leftmost index.
            for (int i = 0; i < inits.Length; i++)
            {
                indices.Push(new IndexDesc(i, ((BoundArrayInitialization)inits[i]).Initializers));
                EmitAllElementInitializersRecursive(arrayType, indices, includeConstants);
            }

            Debug.Assert(!indices.Any());
        }
开发者ID:GeertVL,项目名称:roslyn,代码行数:18,代码来源:EmitArrayInitializer.cs

示例3: TypeEnumerator

 public TypeEnumerator(Type type)
 {
     _first = true;
     _stack = ArrayBuilder<Type>.GetInstance();
     _stack.Push(type);
 }
开发者ID:XieShuquan,项目名称:roslyn,代码行数:6,代码来源:TypeWalker.cs

示例4: PushReachableBlockToProcess

 private static void PushReachableBlockToProcess(ArrayBuilder<BasicBlock> reachableBlocks, BasicBlock block)
 {
     if (block.Reachability == Reachability.NotReachable)
     {
         reachableBlocks.Push(block);
     }
 }
开发者ID:GloryChou,项目名称:roslyn,代码行数:7,代码来源:ILBuilder.cs

示例5: ThreeEnumeratorListStack

 public ThreeEnumeratorListStack(SyntaxNode startingNode, Func<SyntaxNode, bool> descendIntoChildren)
 {
     _nodeStack = new ChildSyntaxListEnumeratorStack(startingNode, descendIntoChildren);
     _triviaStack = new TriviaListEnumeratorStack();
     if (_nodeStack.IsNotEmpty)
     {
         _tokenStack = ArrayBuilder<SyntaxNodeOrToken>.GetInstance();
         _discriminatorStack = ArrayBuilder<Which>.GetInstance();
         _discriminatorStack.Push(Which.Node);
     }
     else
     {
         _tokenStack = null;
         _discriminatorStack = null;
     }
 }
开发者ID:Rickinio,项目名称:roslyn,代码行数:16,代码来源:SyntaxNode.Iterators.cs


注:本文中的ArrayBuilder.Push方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。