//===--- MemIndex.h - Dynamic in-memory symbol index. -------------- C++-*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MEMINDEX_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MEMINDEX_H

#include "Index.h"
#include <mutex>

namespace clang {
namespace clangd {

/// \brief This implements an index for a (relatively small) set of symbols that
/// can be easily managed in memory.
class MemIndex : public SymbolIndex {
public:
  /// \brief (Re-)Build index for `Symbols`. All symbol pointers must remain
  /// accessible as long as `Symbols` is kept alive.
  void build(std::shared_ptr<std::vector<const Symbol *>> Symbols);

  /// \brief Build index from a symbol slab.
  static std::unique_ptr<SymbolIndex> build(SymbolSlab Slab);

  bool
  fuzzyFind(const FuzzyFindRequest &Req,
            llvm::function_ref<void(const Symbol &)> Callback) const override;

  virtual void
  lookup(const LookupRequest &Req,
         llvm::function_ref<void(const Symbol &)> Callback) const override;

private:
  std::shared_ptr<std::vector<const Symbol *>> Symbols;
  // Index is a set of symbols that are deduplicated by symbol IDs.
  // FIXME: build smarter index structure.
  llvm::DenseMap<SymbolID, const Symbol *> Index;
  mutable std::mutex Mutex;
};

} // namespace clangd
} // namespace clang

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MEMINDEX_H
