Summary:
I'm working with a parser that requires a certain number of
contiguous bytes to be able to make forward progress. I'm also using
IOBufQueue to receive data from an AsyncReader::ReadCallback with
pre/postallocate. So, I need to call gather() to ensure that the queue's
front IOBuf has the right number of contiguous bytes available.
Reviewed By: djwatson
Differential Revision:
D3838079
fbshipit-source-id:
9f1ec5c86895eb1b2b109f9f145ca42d2dbba4c6
}
}
+void IOBufQueue::gather(uint64_t maxLength) {
+ if (head_ != nullptr) {
+ head_->gather(maxLength);
+ }
+}
+
} // folly
*/
void appendToString(std::string& out) const;
+ /**
+ * Calls IOBuf::gather() on the head of the queue, if it exists.
+ */
+ void gather(uint64_t maxLength);
+
/** Movable */
IOBufQueue(IOBufQueue&&) noexcept;
IOBufQueue& operator=(IOBufQueue&&);
queue.appendToString(s);
EXPECT_EQ("hello world", s);
}
+
+TEST(IOBufQueue, Gather) {
+ IOBufQueue queue;
+
+ queue.append(stringToIOBuf(SCL("hello ")));
+ queue.append(stringToIOBuf(SCL("world")));
+
+ EXPECT_EQ(queue.front()->length(), 6);
+ queue.gather(11);
+ EXPECT_EQ(queue.front()->length(), 11);
+
+ StringPiece s(
+ reinterpret_cast<const char*>(queue.front()->data()),
+ queue.front()->length());
+ EXPECT_EQ("hello world", s);
+}