Commit 2f028f63 authored by Daniel Sommermann's avatar Daniel Sommermann Committed by Facebook Github Bot 2

Add forwarding gather() function to IOBufQueue

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
parent 0c723a60
...@@ -286,4 +286,10 @@ void IOBufQueue::appendToString(std::string& out) const { ...@@ -286,4 +286,10 @@ void IOBufQueue::appendToString(std::string& out) const {
} }
} }
void IOBufQueue::gather(uint64_t maxLength) {
if (head_ != nullptr) {
head_->gather(maxLength);
}
}
} // folly } // folly
...@@ -265,6 +265,11 @@ class IOBufQueue { ...@@ -265,6 +265,11 @@ class IOBufQueue {
*/ */
void appendToString(std::string& out) const; void appendToString(std::string& out) const;
/**
* Calls IOBuf::gather() on the head of the queue, if it exists.
*/
void gather(uint64_t maxLength);
/** Movable */ /** Movable */
IOBufQueue(IOBufQueue&&) noexcept; IOBufQueue(IOBufQueue&&) noexcept;
IOBufQueue& operator=(IOBufQueue&&); IOBufQueue& operator=(IOBufQueue&&);
......
...@@ -385,3 +385,19 @@ TEST(IOBufQueue, AppendToString) { ...@@ -385,3 +385,19 @@ TEST(IOBufQueue, AppendToString) {
queue.appendToString(s); queue.appendToString(s);
EXPECT_EQ("hello world", 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);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment