[PATCH] D59407: [clangd] Add RelationSlab

Kadir Cetinkaya via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 22 08:05:20 PDT 2019


kadircet added a comment.

Mostly LG from my side, thanks!



================
Comment at: clang-tools-extra/clangd/index/Relation.cpp:19
+llvm::iterator_range<RelationSlab::iterator>
+RelationSlab::lookup(const SymbolID &Subject,
+                     index::SymbolRole Predicate) const {
----------------
I would suggest adding another version which returns all the relations a given `Subject` participates, but I suppose currently we don't have any use cases.

Feel free to add or skip, that can be added when necessary.


================
Comment at: clang-tools-extra/clangd/index/Relation.cpp:24
+                                   [](const Relation &A, const Relation &B) {
+                                     return (A.Subject < B.Subject) ||
+                                            (A.Subject == B.Subject &&
----------------
`std::tie`


================
Comment at: clang-tools-extra/clangd/index/Relation.h:31
+  bool operator==(const Relation &Other) const {
+    return Subject == Other.Subject && Predicate == Other.Predicate &&
+           Object == Other.Object;
----------------
nit: could you use `std::tie`


================
Comment at: clang-tools-extra/clangd/index/Relation.h:35
+  // SPO order
+  bool operator<(const Relation &Other) const {
+    if (Subject < Other.Subject) {
----------------
again `std::tie`


================
Comment at: clang-tools-extra/clangd/index/Relation.h:52
+
+class RelationSlab {
+public:
----------------
I believe `RelationSlab` should still be immutable, even after the `build` operation below `RelationSlab` is mutable.
Let's introduce the builder class and move mutating operations and build into it. So that it would be more symmetric to other slabs we have.

Also are there any use-cases requiring RelationSlab to be mutable?


================
Comment at: clang-tools-extra/clangd/index/Relation.h:60
+  // that possibility for the future. Having a build() method is
+  // also useful so when know when to sort the relations.
+  using Builder = RelationSlab;
----------------
there seems to be some typos in the comment


================
Comment at: clang-tools-extra/clangd/index/Relation.h:72
+
+  void push_back(const Relation &R) { Relations.push_back(R); }
+
----------------
maybe rename to `insert` to keep symmetry with other slabs?
also it suggests a semantics on the operation that we don't care about.


================
Comment at: clang-tools-extra/clangd/index/Relation.h:79
+  /// Sort relations in SPO order.
+  void sort();
+
----------------
maybe even get rid of sort by inlining it into build?


================
Comment at: clang-tools-extra/clangd/index/Relation.h:82
+  /// Lookup all relations matching the given subject and predicate.
+  /// Assumes the slab is sorted in SPO order.
+  llvm::iterator_range<iterator> lookup(const SymbolID &Subject,
----------------
again, we could get rid of this comment if slab was immutable


================
Comment at: clang-tools-extra/clangd/index/Relation.h:89
+private:
+  RelationSlab(std::vector<Relation> Relations)
+      : Relations(std::move(Relations)) {}
----------------
Do we really need this?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59407/new/

https://reviews.llvm.org/D59407





More information about the cfe-commits mailing list