internal override void RemoveChild(Opcode opcode) { LiteralRelationOpcode opcode2 = this.ValidateOpcode(opcode); QueryBranch branch = this.branchIndex[opcode2.Literal]; this.branchIndex.Remove(opcode2.Literal); Opcode opcode1 = branch.Branch; opcode1.Flags &= ~OpcodeFlags.NoContextCopy; if (this.alwaysBranches != null) { int index = this.alwaysBranches.IndexOfID(branch.ID); if (index >= 0) { this.alwaysBranches.RemoveAt(index); if (this.alwaysBranches.Count == 0) { this.alwaysBranches = null; } } } }
internal void InvokeNonMatches(ProcessingContext context, QueryBranchTable nonMatchTable) { int counterMarker = context.Processor.CounterMarker; BranchContext context2 = new BranchContext(context); int num2 = 0; int num3 = 0; while ((num3 < this.resultTable.Count) && (num2 < nonMatchTable.Count)) { QueryBranchResult result = this.resultTable[num3]; int num4 = result.Branch.ID - nonMatchTable[num2].ID; if (num4 > 0) { ProcessingContext context3 = context2.Create(); this.InvokeNonMatch(context3, nonMatchTable[num2]); context.Processor.CounterMarker = counterMarker; num2++; } else { if (num4 == 0) { num2++; continue; } num3++; } } while (num2 < nonMatchTable.Count) { ProcessingContext context4 = context2.Create(); this.InvokeNonMatch(context4, nonMatchTable[num2]); context.Processor.CounterMarker = counterMarker; num2++; } context2.Release(); }
internal void RemoveAlwaysBranch(Opcode opcode) { if (this.alwaysBranches != null) { if (OpcodeID.Branch == opcode.ID) { OpcodeList branches = ((BranchOpcode) opcode).Branches; for (int i = 0; i < branches.Count; i++) { this.alwaysBranches.Remove(branches[i]); } } else { this.alwaysBranches.Remove(opcode); } if (this.alwaysBranches.Count == 0) { this.alwaysBranches = null; } } }