clang-tools
22.0.0git
llvm-project
clang-tools-extra
clangd
index
Relation.cpp
Go to the documentation of this file.
1
//===--- Relation.cpp --------------------------------------------*- C++-*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "
Relation.h
"
10
11
#include <algorithm>
12
13
namespace
clang
{
14
namespace
clangd
{
15
16
llvm::raw_ostream &
operator<<
(llvm::raw_ostream &OS,
const
RelationKind
R) {
17
switch
(R) {
18
case
RelationKind::BaseOf
:
19
return
OS <<
"BaseOf"
;
20
case
RelationKind::OverriddenBy
:
21
return
OS <<
"OverriddenBy"
;
22
}
23
llvm_unreachable(
"Unhandled RelationKind enum."
);
24
}
25
26
llvm::raw_ostream &
operator<<
(llvm::raw_ostream &OS,
const
Relation
&R) {
27
return
OS << R.
Subject
<<
" "
<< R.
Predicate
<<
" "
<< R.
Object
;
28
}
29
30
llvm::iterator_range<RelationSlab::iterator>
31
RelationSlab::lookup
(
const
SymbolID
&Subject,
RelationKind
Predicate)
const
{
32
auto
IterPair = std::equal_range(Relations.begin(), Relations.end(),
33
Relation
{Subject, Predicate, SymbolID{}},
34
[](
const
Relation
&A,
const
Relation
&B) {
35
return
std::tie(A.Subject, A.Predicate) <
36
std::tie(B.Subject, B.Predicate);
37
});
38
return
{IterPair.first, IterPair.second};
39
}
40
41
RelationSlab
RelationSlab::Builder::build
() && {
42
// Sort in SPO order.
43
llvm::sort(Relations);
44
45
// Remove duplicates.
46
Relations.erase(llvm::unique(Relations), Relations.end());
47
48
return
RelationSlab
{std::move(Relations)};
49
}
50
51
}
// namespace clangd
52
}
// namespace clang
Relation.h
clang::clangd::RelationSlab::Builder::build
RelationSlab build() &&
Consumes the builder to finalize the slab.
Definition
Relation.cpp:41
clang::clangd::RelationSlab::lookup
llvm::iterator_range< iterator > lookup(const SymbolID &Subject, RelationKind Predicate) const
Lookup all relations matching the given subject and predicate.
Definition
Relation.cpp:31
clang::clangd::RelationSlab::RelationSlab
RelationSlab()=default
clang::clangd::SymbolID
Definition
SymbolID.h:32
clang::clangd
FIXME: Skip testing on windows temporarily due to the different escaping code mode.
Definition
AST.cpp:45
clang::clangd::operator<<
llvm::raw_ostream & operator<<(llvm::raw_ostream &OS, const CodeCompletion &C)
Definition
CodeComplete.cpp:2435
clang::clangd::RelationKind
RelationKind
Definition
Relation.h:20
clang::clangd::RelationKind::BaseOf
@ BaseOf
Definition
Relation.h:21
clang::clangd::RelationKind::OverriddenBy
@ OverriddenBy
Definition
Relation.h:22
clang
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
Definition
ApplyReplacements.h:27
clang::clangd::Relation
Represents a relation between two symbols.
Definition
Relation.h:32
clang::clangd::Relation::Object
SymbolID Object
Definition
Relation.h:35
clang::clangd::Relation::Subject
SymbolID Subject
Definition
Relation.h:33
clang::clangd::Relation::Predicate
RelationKind Predicate
Definition
Relation.h:34
Generated on
for clang-tools by
1.14.0