Chromium Code Reviews| Index: sky/engine/tonic/dart_library_loader.cc |
| diff --git a/sky/engine/tonic/dart_library_loader.cc b/sky/engine/tonic/dart_library_loader.cc |
| index ac7228e66c24aa58c78eafbe3bb544e5813427ab..61a22cb39b2d41c7caffb29cf42d0e90d895d281 100644 |
| --- a/sky/engine/tonic/dart_library_loader.cc |
| +++ b/sky/engine/tonic/dart_library_loader.cc |
| @@ -20,6 +20,14 @@ using mojo::common::DataPipeDrainer; |
| namespace blink { |
| +// Helper to erase a T* from a container of std::unique_ptr<T>s. |
| +template<typename T, typename C> |
| +void EraseUniquePtr(C& c, T* t) { |
| + std::unique_ptr<T> temp_ptr = std::unique_ptr<T>(t); |
| + c.erase(temp_ptr); |
| + temp_ptr.release(); |
| +} |
|
abarth-chromium
2015/07/16 16:50:42
Please wrap this function in an anonymous namespac
Cutch
2015/07/16 17:00:51
Done. temp_ptr -> key.
|
| + |
| // A DartLibraryLoader::Job represents a network load. It fetches data from the |
| // network and buffers the data in std::vector. To cancel the job, delete this |
| // object. |
| @@ -102,27 +110,28 @@ class DartLibraryLoader::SourceJob : public Job { |
| // the |callback| will be invoked. |
| class DartLibraryLoader::DependencyWatcher { |
| public: |
| - DependencyWatcher(const HashSet<DartDependency*>& dependencies, |
| + DependencyWatcher(const std::unordered_set<DartDependency*>& dependencies, |
| const base::Closure& callback) |
| : dependencies_(dependencies), callback_(callback) { |
| - DCHECK(!dependencies_.isEmpty()); |
| + DCHECK(!dependencies_.empty()); |
| } |
| - bool DidResolveDependency(DartDependency* resolved_dependency, |
| - const HashSet<DartDependency*>& new_dependencies) { |
| + bool DidResolveDependency( |
| + DartDependency* resolved_dependency, |
| + const std::unordered_set<DartDependency*>& new_dependencies) { |
| const auto& it = dependencies_.find(resolved_dependency); |
| if (it == dependencies_.end()) |
| return false; |
| - dependencies_.remove(it); |
| + dependencies_.erase(it); |
| for (const auto& dependency : new_dependencies) |
| - dependencies_.add(dependency); |
| - return dependencies_.isEmpty(); |
| + dependencies_.insert(dependency); |
| + return dependencies_.empty(); |
| } |
| const base::Closure& callback() const { return callback_; } |
| private: |
| - HashSet<DartDependency*> dependencies_; |
| + std::unordered_set<DartDependency*> dependencies_; |
| base::Closure callback_; |
| }; |
| @@ -156,7 +165,7 @@ class DartLibraryLoader::WatcherSignaler { |
| std::vector<base::Closure> callbacks; |
| for (const auto& watcher : completed_watchers) { |
| callbacks.push_back(watcher->callback()); |
| - loader_.dependency_watchers_.remove(watcher); |
| + EraseUniquePtr(loader_.dependency_watchers_, watcher); |
| } |
| // Finally, run all the callbacks while touching only data on the stack. |
| @@ -199,21 +208,22 @@ Dart_Handle DartLibraryLoader::HandleLibraryTag(Dart_LibraryTag tag, |
| } |
| void DartLibraryLoader::WaitForDependencies( |
| - const HashSet<DartDependency*>& dependencies, |
| + const std::unordered_set<DartDependency*>& dependencies, |
| const base::Closure& callback) { |
| - if (dependencies.isEmpty()) |
| + if (dependencies.empty()) |
| return callback.Run(); |
| - dependency_watchers_.add( |
| - adoptPtr(new DependencyWatcher(dependencies, callback))); |
| + dependency_watchers_.insert( |
| + std::unique_ptr<DependencyWatcher>( |
| + new DependencyWatcher(dependencies, callback))); |
| } |
| void DartLibraryLoader::LoadLibrary(const std::string& name) { |
| const auto& result = pending_libraries_.insert(std::make_pair(name, nullptr)); |
| if (result.second) { |
| // New entry. |
| - OwnPtr<Job> job = adoptPtr(new ImportJob(this, name)); |
| + std::unique_ptr<Job> job = std::unique_ptr<Job>(new ImportJob(this, name)); |
| result.first->second = job.get(); |
| - jobs_.add(job.release()); |
| + jobs_.insert(std::move(job)); |
| } |
| if (dependency_catcher_) |
| dependency_catcher_->AddDependency(result.first->second); |
| @@ -225,11 +235,11 @@ Dart_Handle DartLibraryLoader::Import(Dart_Handle library, Dart_Handle url) { |
| } |
| Dart_Handle DartLibraryLoader::Source(Dart_Handle library, Dart_Handle url) { |
| - OwnPtr<Job> job = |
| - adoptPtr(new SourceJob(this, StdStringFromDart(url), library)); |
| + std::unique_ptr<Job> job = std::unique_ptr<Job>( |
| + new SourceJob(this, StdStringFromDart(url), library)); |
| if (dependency_catcher_) |
| dependency_catcher_->AddDependency(job.get()); |
| - jobs_.add(job.release()); |
| + jobs_.insert(std::move(job)); |
| return Dart_True(); |
| } |
| @@ -255,7 +265,7 @@ void DartLibraryLoader::DidCompleteImportJob( |
| } |
| pending_libraries_.erase(job->name()); |
| - jobs_.remove(job); |
| + EraseUniquePtr<Job>(jobs_, job); |
| } |
| void DartLibraryLoader::DidCompleteSourceJob( |
| @@ -276,7 +286,7 @@ void DartLibraryLoader::DidCompleteSourceJob( |
| << Dart_GetError(result); |
| } |
| - jobs_.remove(job); |
| + EraseUniquePtr<Job>(jobs_, job); |
| } |
| void DartLibraryLoader::DidFailJob(Job* job) { |
| @@ -288,7 +298,7 @@ void DartLibraryLoader::DidFailJob(Job* job) { |
| LOG(ERROR) << "Library Load failed: " << job->name(); |
| // TODO(eseidel): Call Dart_LibraryHandleError in the SourceJob case? |
| - jobs_.remove(job); |
| + EraseUniquePtr<Job>(jobs_, job); |
| } |
| } // namespace blink |