bool EqualityComparisonFilter::ChannelMessageSeriesEnd(const std::string &channel, int propagation, bool blocking) { unsigned int i = MapChannel(channel); if (i == 2) { OutputMessageSeriesEnd(4, propagation, blocking, channel); return false; } else if (m_mismatchDetected) return false; else { MessageQueue &q1 = m_q[i], &q2 = m_q[1-i]; if (q2.AnyRetrievable() || q2.AnyMessages()) goto mismatch; else if (q2.NumberOfMessageSeries() > 0) return Output(2, (const byte *)"\1", 1, 0, blocking) != 0; else q1.MessageSeriesEnd(); return false; mismatch: return HandleMismatchDetected(blocking); } }
bool Filter::MessageSeriesEnd(int propagation, bool blocking) { switch (m_continueAt) { case 0: if (IsolatedMessageSeriesEnd(blocking)) return true; case 1: if (ShouldPropagateMessageSeriesEnd() && OutputMessageSeriesEnd(1, propagation, blocking)) return true; } return false; }