OperationContext.cs
49 lines
| 1.7 KiB
| text/x-csharp
|
CSharpLexer
|
|
r92 | namespace Implab.Diagnostics { | ||
| struct OperationContext { | ||||
| readonly LogicalOperation m_initial; | ||||
| public readonly static OperationContext EMPTY = new OperationContext(LogicalOperation.EMPTY, false); | ||||
| LogicalOperation m_current; | ||||
| readonly bool m_ownership; | ||||
| public OperationContext(LogicalOperation operation, bool ownership) { | ||||
| Safe.ArgumentNotNull(operation, "operation"); | ||||
| m_initial = operation; | ||||
| m_current = operation; | ||||
| m_ownership = ownership; | ||||
| } | ||||
| public LogicalOperation CurrentOperation { | ||||
| get { return m_current; } | ||||
| } | ||||
| public void BeginLogicalOperation(string name) { | ||||
| m_current = new LogicalOperation(name, m_current); | ||||
| } | ||||
| public LogicalOperation DetachLogicalOperation() { | ||||
| var detached = m_current; | ||||
| if (m_current != LogicalOperation.EMPTY) { | ||||
| if (m_current != m_initial) | ||||
| m_current = m_current.Parent; | ||||
| else if (m_ownership) | ||||
| m_current = LogicalOperation.EMPTY; | ||||
| else | ||||
| detached = LogicalOperation.EMPTY; | ||||
| } | ||||
| TraceLog.TraceWarning("EndLogicalOperation can't be applied in the current context"); | ||||
| return detached; | ||||
| } | ||||
| public void EndLogicalOperation() { | ||||
| if (m_current != m_initial) { | ||||
| m_current = m_current.Parent; | ||||
| } else if (m_current != null && m_ownership) { | ||||
| m_current = null; | ||||
| } else { | ||||
| TraceLog.TraceWarning("EndLogicalOperation can't be applied in the current context"); | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
