public Thread(Node node, InstructionStream instructionStream, AutomataContextState contextState) : this() { CurrentNode = node; InstructionPointer = InstructionStream.InitializeInstructionPointer(); InstructionStream = instructionStream.AddReference(); ContextState = contextState; }
protected sealed override void DisposeContextState(AutomataContextState contextState) { if (contextState == null) { return; } var parserContextState = (ParserAutomataContextState)contextState; parserContextState.ParserContext.Dispose(); parserContextState.ParserContext = null; _parserAutomataContextStatesPool.Push(parserContextState); }
protected sealed override AutomataContextState CloneContextState(AutomataContextState contextState) { if (contextState == null) { return(null); } var parserContextState = (ParserAutomataContextState)contextState; var cloneContextState = _parserAutomataContextStatesPool.Count > 0 ? _parserAutomataContextStatesPool.Pop() : new ParserAutomataContextState(); var parserContextClone = parserContextState.ParserContext.Clone(); parserContextClone.ParserAutomataContext = this; cloneContextState.ParserContext = parserContextClone; return(cloneContextState); }
public Thread(ThreadParent parent, Node node, InstructionStream instructionStream, int instructionPointer, AutomataContextState contextState) : this() { CurrentNode = node; InstructionPointer = instructionPointer; ContextState = contextState; InstructionStream = instructionStream.AddReference(); InstructionStream.LockPointer(InstructionPointer); if (parent == null) { return; } Parent = parent; Parent.AddReference(); }
public void Dispose(Process process) { if (Parent == null) { Stack?.ReleaseReference(); ExecutionQueue?.ReleaseReference(); PredicateResultQueue?.ReleaseReference(); } else { if (ReferenceEquals(Stack, Parent.Stack) == false) { Stack?.ReleaseReference(); } if (ReferenceEquals(ExecutionQueue, Parent.ExecutionQueue) == false) { ExecutionQueue?.ReleaseReference(); } if (ReferenceEquals(PredicateResultQueue, Parent.PredicateResultQueue) == false) { PredicateResultQueue?.ReleaseReference(); } Parent.ReleaseReference(); } InstructionStream.UnlockPointer(InstructionPointer); StartExecutionQueue?.ReleaseReference(); InstructionStream.ReleaseReference(); process.Context.DisposeContextStateInternal(ContextState); DfaTrails = null; DfaTrailIndex = -1; Stack = null; Parent = null; ContextState = null; ExecutionQueue = null; InstructionStream = null; StartExecutionQueue = null; }