5 #ifndef CRYPTOPP_IMPORTS 11 MessageQueue::MessageQueue(
unsigned int nodeSize)
12 : m_queue(nodeSize), m_lengths(1, 0U), m_messageCounts(1, 0U)
27 size_t blockedBytes = m_queue.
TransferTo2(target, transferBytes, channel, blocking);
28 m_lengths.front() -= transferBytes;
36 m_lengths.pop_front();
37 if (m_messageCounts[0] == 0 && m_messageCounts.size() > 1)
38 m_messageCounts.pop_front();
45 unsigned int MessageQueue::CopyMessagesTo(
BufferedTransformation &target,
unsigned int count,
const std::string &channel)
const 48 std::deque<lword>::const_iterator it = m_lengths.begin();
50 for (i=0; i<count && it != --m_lengths.end(); ++i, ++it)
52 walker.TransferTo(target, *it, channel);
53 if (GetAutoSignalPropagation())
61 m_queue.swap(rhs.m_queue);
62 m_lengths.swap(rhs.m_lengths);
65 const byte * MessageQueue::Spy(
size_t &contiguousSize)
const 67 const byte *result = m_queue.Spy(contiguousSize);
74 unsigned int EqualityComparisonFilter::MapChannel(
const std::string &channel)
const 76 if (channel == m_firstChannel)
78 else if (channel == m_secondChannel)
89 unsigned int i = MapChannel(channel);
92 return Output(3, inString, length, messageEnd, blocking, channel);
93 else if (m_mismatchDetected)
99 if (q2.AnyMessages() && q2.MaxRetrievable() < length)
102 while (length > 0 && q2.AnyRetrievable())
105 const byte *data = q2.Spy(len);
106 len =
STDMIN(len, length);
107 if (memcmp(inString, data, len) != 0)
114 q1.
Put(inString, length);
118 if (q2.AnyRetrievable())
120 else if (q2.AnyMessages())
122 else if (q2.NumberOfMessageSeries() > 0)
131 return HandleMismatchDetected(blocking);
137 unsigned int i = MapChannel(channel);
141 OutputMessageSeriesEnd(4, propagation, blocking, channel);
144 else if (m_mismatchDetected)
150 if (q2.AnyRetrievable() || q2.AnyMessages())
152 else if (q2.NumberOfMessageSeries() > 0)
153 return Output(2, (
const byte *)
"\1", 1, 0, blocking) != 0;
160 return HandleMismatchDetected(blocking);
164 bool EqualityComparisonFilter::HandleMismatchDetected(
bool blocking)
166 m_mismatchDetected =
true;
167 if (m_throwIfNotEqual)
168 throw MismatchDetected();
169 const byte b[1] = {0};
170 return Output(1, b, 1, 0, blocking) != 0;
bool AnyRetrievable() const
Determines whether bytes are ready for retrieval.
size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const
Copy bytes from this object to another BufferedTransformation.
size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true)
Transfer bytes from this object to another BufferedTransformation.
bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true)
Marks the end of a series of messages on a channel.
unsigned int NumberOfMessages() const
Provides the number of meesages processed by this object.
const T1 UnsignedMin(const T1 &a, const T2 &b)
Safe comparison of values that could be neagtive and incorrectly promoted.
const T & STDMIN(const T &a, const T &b)
Replacement function for std::min.
size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing on a channel.
lword MaxRetrievable() const
Provides the number of bytes ready for retrieval.
bool GetNextMessage()
Start retrieving the next message.
Crypto++ library namespace.
size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true)
Transfer bytes from this object to another BufferedTransformation.
size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const
Copy bytes from this object to another BufferedTransformation.