[PATCH] D34269: [clangd] Add "Go to Declaration" functionality
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 28 01:46:39 PDT 2017
ilya-biryukov added inline comments.
================
Comment at: clangd/ClangdUnit.cpp:276
+class DeclarationLocationsFinder : public index::IndexDataConsumer {
+ std::unique_ptr<std::vector<Location>> DeclarationLocations;
+ const SourceLocation &SearchedLocation;
----------------
malaperle-ericsson wrote:
> malaperle-ericsson wrote:
> > ilya-biryukov wrote:
> > > Why do we need to use `unique_ptr<vector<Location>>` here and in other places instead of `vector<Location>`?
> > It was to implement "takeLocations". Calling it claims ownship of the vector. Did you have something else in mind when you suggested to implement takeLocations with a std::move? Disclaimer: this c++11 stuff is all new to me so I wouldn't be surprised if I'm doing it in a terrible way.
> I guess I can make takeLocations return a vector&& and the other places will return a normal vector RVO will take care of not making copies?
Just return `std::vector` and `std::move` the original field. It will have the same behaviour (i.e. no copies of the vector data, ownership transferred to the caller) without extra heap allocs:
```
std::vector<Location> takeLocations() {
// .... Do postprocessing here, i.e. sort+unique+erase
return std::move(DeclarationLocations);
}
// ...
private:
std::vector<Location> DeclarationLocations;
```
https://reviews.llvm.org/D34269
More information about the cfe-commits
mailing list