Mercurial > hg > CbC > CbC_llvm
view clang-tools-extra/clangd/index/Relation.cpp @ 221:79ff65ed7e25
LLVM12 Original
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 15 Jun 2021 19:15:29 +0900 |
parents | 0572611fdcc8 |
children |
line wrap: on
line source
//===--- Relation.cpp --------------------------------------------*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "Relation.h" #include <algorithm> namespace clang { namespace clangd { llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const RelationKind R) { switch (R) { case RelationKind::BaseOf: return OS << "BaseOf"; case RelationKind::OverriddenBy: return OS << "OverriddenBy"; } llvm_unreachable("Unhandled RelationKind enum."); } llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const Relation &R) { return OS << R.Subject << " " << R.Predicate << " " << R.Object; } llvm::iterator_range<RelationSlab::iterator> RelationSlab::lookup(const SymbolID &Subject, RelationKind Predicate) const { auto IterPair = std::equal_range(Relations.begin(), Relations.end(), Relation{Subject, Predicate, SymbolID{}}, [](const Relation &A, const Relation &B) { return std::tie(A.Subject, A.Predicate) < std::tie(B.Subject, B.Predicate); }); return {IterPair.first, IterPair.second}; } RelationSlab RelationSlab::Builder::build() && { // Sort in SPO order. llvm::sort(Relations); // Remove duplicates. Relations.erase(std::unique(Relations.begin(), Relations.end()), Relations.end()); return RelationSlab{std::move(Relations)}; } } // namespace clangd } // namespace clang