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); }
public static IEnumerable <object> Operations() { OperationStackItem current = Top(); while (current != null) { yield return(current.Operation); current = current.Parent; } }
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); }
internal OperationStackItem(OperationStackItem parentOperation, object operation) { parent = parentOperation; this.operation = operation; depth = parent == null ? 1 : parent.Depth + 1; }
internal static OperationStackItem Top() { OperationStackItem top = CallContext.LogicalGetData(OperationStackSlot) as OperationStackItem; return(top); }
public static object Peek() { OperationStackItem top = Top(); return(top != null ? top.Operation : null); }