clang-tools  9.0.0
Classes | Public Member Functions | List of all members
clang::clangd::FileSymbols Class Reference

A container of Symbols from several source files. More...

#include <FileIndex.h>

Public Member Functions

void update (PathRef Path, std::unique_ptr< SymbolSlab > Slab, std::unique_ptr< RefSlab > Refs, std::unique_ptr< RelationSlab > Relations, bool CountReferences)
 Updates all symbols and refs in a file. More...
 
std::unique_ptr< SymbolIndexbuildIndex (IndexType, DuplicateHandling DuplicateHandle=DuplicateHandling::PickOne)
 The index keeps the symbols alive. More...
 

Detailed Description

A container of Symbols from several source files.

It can be updated at source-file granularity, replacing all symbols from one file with a new set.

This implements a snapshot semantics for symbols in a file. Each update to a file will create a new snapshot for all symbols in the file. Snapshots are managed with shared pointers that are shared between this class and the users. For each file, this class only stores a pointer pointing to the newest snapshot, and an outdated snapshot is deleted by the last owner of the snapshot, either this class or the symbol index.

The snapshot semantics keeps critical sections minimal since we only need locking when we swap or obtain references to snapshots.

Definition at line 59 of file FileIndex.h.

Member Function Documentation

◆ buildIndex()

std::unique_ptr< SymbolIndex > clang::clangd::FileSymbols::buildIndex ( IndexType  Type,
DuplicateHandling  DuplicateHandle = DuplicateHandling::PickOne 
)

The index keeps the symbols alive.

Will count Symbol::References based on number of references in the main files, while building the index with DuplicateHandling::Merge option.

Definition at line 118 of file FileIndex.cpp.

References clang::clangd::RelationSlab::bytes(), clang::clangd::RefSlab::bytes(), clang::clangd::Heavy, clang::clangd::Light, clang::clangd::Merge, clang::clangd::mergeSymbol(), clang::clangd::PickOne, and Refs.

Referenced by clang::clangd::FileIndex::updateMain().

◆ update()

void clang::clangd::FileSymbols::update ( PathRef  Path,
std::unique_ptr< SymbolSlab Slab,
std::unique_ptr< RefSlab Refs,
std::unique_ptr< RelationSlab Relations,
bool  CountReferences 
)

Updates all symbols and refs in a file.

If either is nullptr, corresponding data for Path will be removed. If CountReferences is true, Refs will be used for counting References during merging.

Definition at line 94 of file FileIndex.cpp.

Referenced by clang::clangd::FileIndex::updateMain().


The documentation for this class was generated from the following files: