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

Side by Side Diff: cc/base/list_container_helper.cc

Issue 1866203004: Convert //cc from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptrcc: rebase Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « cc/base/list_container_helper.h ('k') | cc/base/math_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/base/list_container_helper.h" 5 #include "cc/base/list_container_helper.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
(...skipping 11 matching lines...) Expand all
22 //////////////////////////////////////////////////// 22 ////////////////////////////////////////////////////
23 // This class deals only with char* and void*. It does allocation and passing 23 // This class deals only with char* and void*. It does allocation and passing
24 // out raw pointers, as well as memory deallocation when being destroyed. 24 // out raw pointers, as well as memory deallocation when being destroyed.
25 class ListContainerHelper::CharAllocator { 25 class ListContainerHelper::CharAllocator {
26 public: 26 public:
27 // CharAllocator::InnerList 27 // CharAllocator::InnerList
28 ///////////////////////////////////////////// 28 /////////////////////////////////////////////
29 // This class holds the raw memory chunk, as well as information about its 29 // This class holds the raw memory chunk, as well as information about its
30 // size and availability. 30 // size and availability.
31 struct InnerList { 31 struct InnerList {
32 scoped_ptr<char[]> data; 32 std::unique_ptr<char[]> data;
33 // The number of elements in total the memory can hold. The difference 33 // The number of elements in total the memory can hold. The difference
34 // between capacity and size is the how many more elements this list can 34 // between capacity and size is the how many more elements this list can
35 // hold. 35 // hold.
36 size_t capacity; 36 size_t capacity;
37 // The number of elements have been put into this list. 37 // The number of elements have been put into this list.
38 size_t size; 38 size_t size;
39 // The size of each element is in bytes. This is used to move from between 39 // The size of each element is in bytes. This is used to move from between
40 // elements' memory locations. 40 // elements' memory locations.
41 size_t step; 41 size_t step;
42 42
(...skipping 16 matching lines...) Expand all
59 void InsertBefore(char** position, size_t count) { 59 void InsertBefore(char** position, size_t count) {
60 DCHECK_LE(*position, LastElement() + step); 60 DCHECK_LE(*position, LastElement() + step);
61 DCHECK_GE(*position, Begin()); 61 DCHECK_GE(*position, Begin());
62 62
63 // Adjust the size and capacity 63 // Adjust the size and capacity
64 size_t old_size = size; 64 size_t old_size = size;
65 size += count; 65 size += count;
66 capacity = size; 66 capacity = size;
67 67
68 // Allocate the new data and update the iterator's pointer. 68 // Allocate the new data and update the iterator's pointer.
69 scoped_ptr<char[]> new_data(new char[size * step]); 69 std::unique_ptr<char[]> new_data(new char[size * step]);
70 size_t position_offset = *position - Begin(); 70 size_t position_offset = *position - Begin();
71 *position = new_data.get() + position_offset; 71 *position = new_data.get() + position_offset;
72 72
73 // Copy the data before the inserted segment 73 // Copy the data before the inserted segment
74 memcpy(new_data.get(), data.get(), position_offset); 74 memcpy(new_data.get(), data.get(), position_offset);
75 // Copy the data after the inserted segment. 75 // Copy the data after the inserted segment.
76 memcpy(new_data.get() + position_offset + count * step, 76 memcpy(new_data.get() + position_offset + count * step,
77 data.get() + position_offset, old_size * step - position_offset); 77 data.get() + position_offset, old_size * step - position_offset);
78 new_data.swap(data); 78 new_data.swap(data);
79 } 79 }
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 --id; 233 --id;
234 return id; 234 return id;
235 } 235 }
236 236
237 size_t NumAvailableElementsInLastList() const { 237 size_t NumAvailableElementsInLastList() const {
238 return last_list_->NumElementsAvailable(); 238 return last_list_->NumElementsAvailable();
239 } 239 }
240 240
241 private: 241 private:
242 void AllocateNewList(size_t list_size) { 242 void AllocateNewList(size_t list_size) {
243 scoped_ptr<InnerList> new_list(new InnerList); 243 std::unique_ptr<InnerList> new_list(new InnerList);
244 new_list->capacity = list_size; 244 new_list->capacity = list_size;
245 new_list->size = 0; 245 new_list->size = 0;
246 new_list->step = element_size_; 246 new_list->step = element_size_;
247 new_list->data.reset(new char[list_size * element_size_]); 247 new_list->data.reset(new char[list_size * element_size_]);
248 storage_.push_back(std::move(new_list)); 248 storage_.push_back(std::move(new_list));
249 } 249 }
250 250
251 std::vector<scoped_ptr<InnerList>> storage_; 251 std::vector<std::unique_ptr<InnerList>> storage_;
252 const size_t element_size_; 252 const size_t element_size_;
253 253
254 // The number of elements in the list. 254 // The number of elements in the list.
255 size_t size_; 255 size_t size_;
256 256
257 // The index of the last list to have had elements added to it, or the only 257 // The index of the last list to have had elements added to it, or the only
258 // list if the container has not had elements added since being cleared. 258 // list if the container has not had elements added since being cleared.
259 size_t last_list_index_; 259 size_t last_list_index_;
260 260
261 // This is equivalent to |storage_[last_list_index_]|. 261 // This is equivalent to |storage_[last_list_index_]|.
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 : PositionInCharAllocator(container, vector_ind, item_iter), 549 : PositionInCharAllocator(container, vector_ind, item_iter),
550 index_(index) {} 550 index_(index) {}
551 551
552 ListContainerHelper::ConstReverseIterator::~ConstReverseIterator() {} 552 ListContainerHelper::ConstReverseIterator::~ConstReverseIterator() {}
553 553
554 size_t ListContainerHelper::ConstReverseIterator::index() const { 554 size_t ListContainerHelper::ConstReverseIterator::index() const {
555 return index_; 555 return index_;
556 } 556 }
557 557
558 } // namespace cc 558 } // namespace cc
OLDNEW
« no previous file with comments | « cc/base/list_container_helper.h ('k') | cc/base/math_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698