Exemplo n.º 1
0
        public static IDisposable Push(string operation)
        {
            OperationStackItem parent = CallContext.LogicalGetData(OperationStackSlot) as OperationStackItem;
            OperationStackItem op     = new OperationStackItem(parent, operation);

            CallContext.LogicalSetData(OperationStackSlot, op);
            return(op);
        }
Exemplo n.º 2
0
        public static IEnumerable <object> Operations()
        {
            OperationStackItem current = Top();

            while (current != null)
            {
                yield return(current.Operation);

                current = current.Parent;
            }
        }
Exemplo n.º 3
0
        public static object Pop()
        {
            OperationStackItem current = CallContext.LogicalGetData(OperationStackSlot) as OperationStackItem;

            if (current != null)
            {
                CallContext.LogicalSetData(OperationStackSlot, current.Parent);
                return(current.Operation);
            }
            else
            {
                CallContext.FreeNamedDataSlot(OperationStackSlot);
            }
            return(null);
        }
Exemplo n.º 4
0
 internal OperationStackItem(OperationStackItem parentOperation, object operation)
 {
     parent         = parentOperation;
     this.operation = operation;
     depth          = parent == null ? 1 : parent.Depth + 1;
 }
Exemplo n.º 5
0
        internal static OperationStackItem Top()
        {
            OperationStackItem top = CallContext.LogicalGetData(OperationStackSlot) as OperationStackItem;

            return(top);
        }
Exemplo n.º 6
0
        public static object Peek()
        {
            OperationStackItem top = Top();

            return(top != null ? top.Operation : null);
        }