Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1482)

Unified Diff: net/spdy/spdy_write_queue.cc

Issue 2386883002: Remove stl_util's deletion functions from net/spdy/. (Closed)
Patch Set: nits Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_write_queue.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_write_queue.cc
diff --git a/net/spdy/spdy_write_queue.cc b/net/spdy/spdy_write_queue.cc
index cc0d787eaf85b825509bb99268a5ec33c4355dd7..50df9440a777541ffcf4cbc66c45eb4f08243a02 100644
--- a/net/spdy/spdy_write_queue.cc
+++ b/net/spdy/spdy_write_queue.cc
@@ -5,31 +5,33 @@
#include "net/spdy/spdy_write_queue.h"
#include <cstddef>
+#include <utility>
#include <vector>
#include "base/logging.h"
-#include "base/stl_util.h"
#include "net/spdy/spdy_buffer.h"
#include "net/spdy/spdy_buffer_producer.h"
#include "net/spdy/spdy_stream.h"
namespace net {
-SpdyWriteQueue::PendingWrite::PendingWrite() : frame_producer(NULL) {}
+SpdyWriteQueue::PendingWrite::PendingWrite() {}
SpdyWriteQueue::PendingWrite::PendingWrite(
SpdyFrameType frame_type,
- SpdyBufferProducer* frame_producer,
+ std::unique_ptr<SpdyBufferProducer> frame_producer,
const base::WeakPtr<SpdyStream>& stream)
: frame_type(frame_type),
- frame_producer(frame_producer),
+ frame_producer(std::move(frame_producer)),
stream(stream),
- has_stream(stream.get() != NULL) {}
-
-SpdyWriteQueue::PendingWrite::PendingWrite(const PendingWrite& other) = default;
+ has_stream(stream.get() != nullptr) {}
SpdyWriteQueue::PendingWrite::~PendingWrite() {}
+SpdyWriteQueue::PendingWrite::PendingWrite(PendingWrite&& other) = default;
+SpdyWriteQueue::PendingWrite& SpdyWriteQueue::PendingWrite::operator=(
+ PendingWrite&& other) = default;
+
SpdyWriteQueue::SpdyWriteQueue() : removing_writes_(false) {}
SpdyWriteQueue::~SpdyWriteQueue() {
@@ -53,8 +55,7 @@ void SpdyWriteQueue::Enqueue(RequestPriority priority,
CHECK_LE(priority, MAXIMUM_PRIORITY);
if (stream.get())
DCHECK_EQ(stream->priority(), priority);
- queue_[priority].push_back(
- PendingWrite(frame_type, frame_producer.release(), stream));
+ queue_[priority].push_back({frame_type, std::move(frame_producer), stream});
}
bool SpdyWriteQueue::Dequeue(
@@ -64,10 +65,10 @@ bool SpdyWriteQueue::Dequeue(
CHECK(!removing_writes_);
for (int i = MAXIMUM_PRIORITY; i >= MINIMUM_PRIORITY; --i) {
if (!queue_[i].empty()) {
- PendingWrite pending_write = queue_[i].front();
+ PendingWrite pending_write = std::move(queue_[i].front());
queue_[i].pop_front();
*frame_type = pending_write.frame_type;
- frame_producer->reset(pending_write.frame_producer);
+ *frame_producer = std::move(pending_write.frame_producer);
*stream = pending_write.stream;
if (pending_write.has_stream)
DCHECK(stream->get());
@@ -92,74 +93,66 @@ void SpdyWriteQueue::RemovePendingWritesForStream(
for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
if (priority == i)
continue;
- for (std::deque<PendingWrite>::const_iterator it = queue_[i].begin();
- it != queue_[i].end(); ++it) {
+ for (auto it = queue_[i].begin(); it != queue_[i].end(); ++it)
DCHECK_NE(it->stream.get(), stream.get());
- }
}
#endif
// Defer deletion until queue iteration is complete, as
// SpdyBuffer::~SpdyBuffer() can result in callbacks into SpdyWriteQueue.
- std::vector<SpdyBufferProducer*> erased_buffer_producers;
+ std::vector<std::unique_ptr<SpdyBufferProducer>> erased_buffer_producers;
// Do the actual deletion and removal, preserving FIFO-ness.
- std::deque<PendingWrite>* queue = &queue_[priority];
- std::deque<PendingWrite>::iterator out_it = queue->begin();
- for (std::deque<PendingWrite>::const_iterator it = queue->begin();
- it != queue->end(); ++it) {
+ std::deque<PendingWrite>& queue = queue_[priority];
+ auto out_it = queue.begin();
+ for (auto it = queue.begin(); it != queue.end(); ++it) {
if (it->stream.get() == stream.get()) {
- erased_buffer_producers.push_back(it->frame_producer);
+ erased_buffer_producers.push_back(std::move(it->frame_producer));
} else {
- *out_it = *it;
+ *out_it = std::move(*it);
++out_it;
}
}
- queue->erase(out_it, queue->end());
+ queue.erase(out_it, queue.end());
removing_writes_ = false;
- base::STLDeleteElements(&erased_buffer_producers); // Invokes callbacks.
}
void SpdyWriteQueue::RemovePendingWritesForStreamsAfter(
SpdyStreamId last_good_stream_id) {
CHECK(!removing_writes_);
removing_writes_ = true;
- std::vector<SpdyBufferProducer*> erased_buffer_producers;
+ std::vector<std::unique_ptr<SpdyBufferProducer>> erased_buffer_producers;
for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
// Do the actual deletion and removal, preserving FIFO-ness.
- std::deque<PendingWrite>* queue = &queue_[i];
- std::deque<PendingWrite>::iterator out_it = queue->begin();
- for (std::deque<PendingWrite>::const_iterator it = queue->begin();
- it != queue->end(); ++it) {
+ std::deque<PendingWrite>& queue = queue_[i];
+ auto out_it = queue.begin();
+ for (auto it = queue.begin(); it != queue.end(); ++it) {
if (it->stream.get() && (it->stream->stream_id() > last_good_stream_id ||
it->stream->stream_id() == 0)) {
- erased_buffer_producers.push_back(it->frame_producer);
+ erased_buffer_producers.push_back(std::move(it->frame_producer));
} else {
- *out_it = *it;
+ *out_it = std::move(*it);
++out_it;
}
}
- queue->erase(out_it, queue->end());
+ queue.erase(out_it, queue.end());
}
removing_writes_ = false;
- base::STLDeleteElements(&erased_buffer_producers); // Invokes callbacks.
}
void SpdyWriteQueue::Clear() {
CHECK(!removing_writes_);
removing_writes_ = true;
- std::vector<SpdyBufferProducer*> erased_buffer_producers;
+ std::vector<std::unique_ptr<SpdyBufferProducer>> erased_buffer_producers;
for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) {
- for (std::deque<PendingWrite>::iterator it = queue_[i].begin();
- it != queue_[i].end(); ++it) {
- erased_buffer_producers.push_back(it->frame_producer);
+ for (auto it = queue_[i].begin(); it != queue_[i].end(); ++it) {
+ erased_buffer_producers.push_back(std::move(it->frame_producer));
}
queue_[i].clear();
}
removing_writes_ = false;
- base::STLDeleteElements(&erased_buffer_producers); // Invokes callbacks.
}
} // namespace net
« no previous file with comments | « net/spdy/spdy_write_queue.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698