clang-tools 22.0.0git
clang::clangd::FileSymbols Class Reference

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

#include <FileIndex.h>

Public Member Functions

 FileSymbols (IndexContents IdxContents, bool SupportContainedRefs)
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.
std::unique_ptr< SymbolIndexbuildIndex (IndexType, DuplicateHandling DuplicateHandle=DuplicateHandling::PickOne, size_t *Version=nullptr)
 The index keeps the slabs alive.
void profile (MemoryTree &MT) const

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 70 of file FileIndex.h.

Constructor & Destructor Documentation

◆ FileSymbols()

clang::clangd::FileSymbols::FileSymbols ( IndexContents IdxContents,
bool SupportContainedRefs )

Definition at line 244 of file FileIndex.cpp.

References FileSymbols().

Referenced by FileSymbols().

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 273 of file FileIndex.cpp.

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

◆ profile()

void clang::clangd::FileSymbols::profile ( MemoryTree & MT) const

◆ 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 247 of file FileIndex.cpp.

References clang::clangd::Symbols.


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