5#ifndef CRYPTOPP_IMPORTS
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();
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);
61 m_queue.
swap(rhs.m_queue);
62 m_lengths.swap(rhs.m_lengths);
67 const byte *result = m_queue.
Spy(contiguousSize);
74unsigned int EqualityComparisonFilter::MapChannel(
const std::string &channel)
const
76 if (channel == m_firstChannel)
78 else if (channel == m_secondChannel)
87 throw BlockingInputOnly(
"EqualityComparisonFilter");
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 (std::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);
135bool EqualityComparisonFilter::ChannelMessageSeriesEnd(
const std::string &channel,
int propagation,
bool 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);
164bool 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;
int GetAutoSignalPropagation() const
Retrieve automatic signal propagation value.
size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true)
Transfer bytes from this object to another BufferedTransformation.
void swap(ByteQueue &rhs)
Swap contents with another ByteQueue.
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.
const byte * Spy(size_t &contiguousSize) const
Peek data in the queue.
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.
Data structure used to store messages.
void swap(MessageQueue &rhs)
Swap contents with another MessageQueue.
bool AnyRetrievable() const
Determines whether bytes are ready for retrieval.
bool GetNextMessage()
Start retrieving the next message.
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.
MessageQueue(unsigned int nodeSize=256)
Construct a MessageQueue.
const byte * Spy(size_t &contiguousSize) const
Peek data in the queue.
unsigned int NumberOfMessages() const
Provides the number of meesages processed by this object.
unsigned int CopyMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL) const
Copy messages from this object to another BufferedTransformation.
lword MaxRetrievable() const
Provides the number of bytes ready for retrieval.
word64 lword
Large word type.
const T & STDMIN(const T &a, const T &b)
Replacement function for std::min.
const T1 UnsignedMin(const T1 &a, const T2 &b)
Safe comparison of values that could be negative and incorrectly promoted.
Classes for an unlimited queue to store messages.
Crypto++ library namespace.