Skip to content

Commit

Permalink
fix(cxx_common): rework VNameRef to conform to VName, templatize VNam…
Browse files Browse the repository at this point in the history
…eLess (#4331)
  • Loading branch information
jaysachs committed Jan 30, 2020
1 parent e645e98 commit 2a83959
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 35 deletions.
46 changes: 30 additions & 16 deletions kythe/cxx/common/indexing/KytheOutputStream.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,40 @@ namespace kythe {
using MarkedSource = kythe::proto::common::MarkedSource;

/// A collection of references to the components of a VName.
struct VNameRef {
absl::string_view signature;
absl::string_view corpus;
absl::string_view root;
absl::string_view path;
absl::string_view language;
class VNameRef {
public:
absl::string_view signature() const { return signature_; }
absl::string_view corpus() const { return corpus_; }
absl::string_view root() const { return root_; }
absl::string_view path() const { return path_; }
absl::string_view language() const { return language_; }
void set_signature(absl::string_view s) { signature_ = s; }
void set_corpus(absl::string_view s) { corpus_ = s; }
void set_root(absl::string_view s) { root_ = s; }
void set_path(absl::string_view s) { path_ = s; }
void set_language(absl::string_view s) { language_ = s; }

explicit VNameRef(const proto::VName& vname)
: signature(vname.signature().data(), vname.signature().size()),
corpus(vname.corpus().data(), vname.corpus().size()),
root(vname.root().data(), vname.root().size()),
path(vname.path().data(), vname.path().size()),
language(vname.language().data(), vname.language().size()) {}
: signature_(vname.signature().data(), vname.signature().size()),
corpus_(vname.corpus().data(), vname.corpus().size()),
root_(vname.root().data(), vname.root().size()),
path_(vname.path().data(), vname.path().size()),
language_(vname.language().data(), vname.language().size()) {}
VNameRef() {}
void Expand(proto::VName* vname) const {
vname->mutable_signature()->assign(signature.data(), signature.size());
vname->mutable_corpus()->assign(corpus.data(), corpus.size());
vname->mutable_root()->assign(root.data(), root.size());
vname->mutable_path()->assign(path.data(), path.size());
vname->mutable_language()->assign(language.data(), language.size());
vname->mutable_signature()->assign(signature_.data(), signature_.size());
vname->mutable_corpus()->assign(corpus_.data(), corpus_.size());
vname->mutable_root()->assign(root_.data(), root_.size());
vname->mutable_path()->assign(path_.data(), path_.size());
vname->mutable_language()->assign(language_.data(), language_.size());
}

private:
absl::string_view signature_;
absl::string_view corpus_;
absl::string_view root_;
absl::string_view path_;
absl::string_view language_;
};
/// A collection of references to the components of a single Kythe fact.
struct FactRef {
Expand Down
7 changes: 4 additions & 3 deletions kythe/cxx/common/vname_ordering.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ namespace kythe {

/// \brief Defines equality on VNames by pairwise comparison of each vector
/// component.
static inline bool VNameEquals(const proto::VName& lhs,
const proto::VName& rhs) {
template <typename VName>
bool VNameEquals(const VName& lhs, const VName& rhs) {
return lhs.signature() == rhs.signature() && lhs.corpus() == rhs.corpus() &&
lhs.root() == rhs.root() && lhs.path() == rhs.path() &&
lhs.language() == rhs.language();
Expand All @@ -32,7 +32,8 @@ static inline bool VNameEquals(const proto::VName& lhs,
/// \brief Defines less-than on VNames as a lexicographic ordering on each
/// vector component.
struct VNameLess {
bool operator()(const proto::VName& lhs, const proto::VName& rhs) const {
template <typename VName>
bool operator()(const VName& lhs, const VName& rhs) const {
if (lhs.signature() < rhs.signature()) return true;
if (lhs.signature() != rhs.signature()) return false;
if (lhs.corpus() < rhs.corpus()) return true;
Expand Down
12 changes: 6 additions & 6 deletions kythe/cxx/indexer/cxx/KytheGraphObserver.cc
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ void KytheGraphObserver::MetaHookDefines(const MetadataFile& meta,
new_signature.append(std::to_string(rule->second.anchor_begin));
new_signature.append("-");
new_signature.append(std::to_string(rule->second.anchor_end));
remote.signature = new_signature;
remote.set_signature(new_signature);
recorder_->AddProperty(remote, NodeKindID::kAnchor);
recorder_->AddProperty(remote, PropertyID::kLocationStartOffset,
rule->second.anchor_begin);
Expand Down Expand Up @@ -572,15 +572,15 @@ absl::optional<GraphObserver::NodeId> KytheGraphObserver::recordFileInitializer(
VNameRef KytheGraphObserver::VNameRefFromNodeId(
const GraphObserver::NodeId& node_id) const {
VNameRef out_ref;
out_ref.language = absl::string_view(supported_language::kIndexerLang);
out_ref.set_language(absl::string_view(supported_language::kIndexerLang));
if (const auto* token =
clang::dyn_cast<KytheClaimToken>(node_id.getToken())) {
token->DecorateVName(&out_ref);
if (token->language_independent()) {
out_ref.language = absl::string_view();
out_ref.set_language(absl::string_view());
}
}
out_ref.signature = ConvertRef(node_id.IdentityRef());
out_ref.set_signature(ConvertRef(node_id.IdentityRef()));
return out_ref;
}

Expand Down Expand Up @@ -890,8 +890,8 @@ void KytheGraphObserver::assignUsr(const NodeId& node, llvm::StringRef usr,
std::min(hash.size(), static_cast<size_t>(byte_size))));
VNameRef node_vname = VNameRefFromNodeId(node);
VNameRef usr_vname;
usr_vname.signature = hex;
usr_vname.language = "usr";
usr_vname.set_signature(hex);
usr_vname.set_language("usr");
recorder_->AddProperty(usr_vname, NodeKindID::kClangUsr);
recorder_->AddEdge(usr_vname, EdgeKindID::kClangUsr, node_vname);
}
Expand Down
12 changes: 6 additions & 6 deletions kythe/cxx/indexer/cxx/KytheGraphObserver.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ class KytheClaimToken : public GraphObserver::ClaimToken {
/// \brief Marks a VNameRef as belonging to this token.
/// This token must outlive the VNameRef.
void DecorateVName(VNameRef* target) const {
target->corpus =
absl::string_view(vname_.corpus().data(), vname_.corpus().size());
target->root =
absl::string_view(vname_.root().data(), vname_.root().size());
target->path =
absl::string_view(vname_.path().data(), vname_.path().size());
target->set_corpus(
absl::string_view(vname_.corpus().data(), vname_.corpus().size()));
target->set_root(
absl::string_view(vname_.root().data(), vname_.root().size()));
target->set_path(
absl::string_view(vname_.path().data(), vname_.path().size()));
}

/// \brief Sets a VName that controls the corpus, root and path of claimed
Expand Down
8 changes: 4 additions & 4 deletions kythe/examples/proto/proto_indexer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -295,10 +295,10 @@ kythe::VNameRef* ProtoTreeCursor::anchor_vname() {
}
anchor_vname_signature_ =
"@" + std::to_string(anchor_start_) + ":" + std::to_string(anchor_end_);
anchor_vname_ref_.signature = anchor_vname_signature_;
anchor_vname_ref_.path = filename_;
anchor_vname_ref_.corpus = corpus_;
anchor_vname_ref_.language = language_;
anchor_vname_ref_.set_signature(anchor_vname_signature_);
anchor_vname_ref_.set_path(filename_);
anchor_vname_ref_.set_corpus(corpus_);
anchor_vname_ref_.set_language(language_);
return &anchor_vname_ref_;
}

Expand Down

0 comments on commit 2a83959

Please sign in to comment.