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

A container of slabs associated with a key. More...

#include <FileIndex.h>

Public Member Functions

void update (llvm::StringRef Key, std::unique_ptr< SymbolSlab > Symbols, std::unique_ptr< RefSlab > Refs, std::unique_ptr< RelationSlab > Relations, bool CountReferences)
 Updates all slabs associated with the Key. More...
 
std::unique_ptr< SymbolIndexbuildIndex (IndexType, DuplicateHandling DuplicateHandle=DuplicateHandling::PickOne, size_t *Version=nullptr)
 The index keeps the slabs alive. More...
 

Detailed Description

A container of slabs associated with a key.

It can be updated at key granularity, replacing all slabs belonging to a key with a new set. Keys are usually file paths/uris.

This implements snapshot semantics. Each update will create a new snapshot for all slabs of the Key. Snapshots are managed with shared pointers that are shared between this class and the users. For each key, 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 71 of file FileIndex.h.

Member Function Documentation

◆ buildIndex()

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

The index keeps the slabs alive.

Will count Symbol::References based on number of references in the main files, while building the index with DuplicateHandling::Merge option. Version is populated with an increasing sequence counter.

Definition at line 252 of file FileIndex.cpp.

Referenced by clang::clangd::FileIndex::updateMain(), and clang::clangd::FileIndex::updatePreamble().

◆ update()

void clang::clangd::FileSymbols::update ( llvm::StringRef  Key,
std::unique_ptr< SymbolSlab Symbols,
std::unique_ptr< RefSlab Refs,
std::unique_ptr< RelationSlab Relations,
bool  CountReferences 
)

Updates all slabs associated with the Key.

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

Definition at line 226 of file FileIndex.cpp.

Referenced by clang::clangd::BackgroundIndex::boostRelated(), clang::clangd::FileIndex::updateMain(), and clang::clangd::FileIndex::updatePreamble().


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