Mercurial > hg > CbC > CbC_llvm
view clang-tools-extra/clangd/DraftStore.h @ 266:00f31e85ec16 default tip
Added tag current for changeset 31d058e83c98
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 14 Oct 2023 10:13:55 +0900 (2023-10-14) |
parents | 1f2b6ac9f198 |
children |
line wrap: on
line source
//===--- DraftStore.h - File contents container -----------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_DRAFTSTORE_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_DRAFTSTORE_H #include "support/Path.h" #include "clang/Basic/LLVM.h" #include "llvm/ADT/StringMap.h" #include "llvm/Support/VirtualFileSystem.h" #include <mutex> #include <optional> #include <string> #include <vector> namespace clang { namespace clangd { /// A thread-safe container for files opened in a workspace, addressed by /// filenames. The contents are owned by the DraftStore. /// Each time a draft is updated, it is assigned a version. This can be /// specified by the caller or incremented from the previous version. class DraftStore { public: struct Draft { std::shared_ptr<const std::string> Contents; std::string Version; }; /// \return Contents of the stored document. /// For untracked files, a std::nullopt is returned. std::optional<Draft> getDraft(PathRef File) const; /// \return List of names of the drafts in this store. std::vector<Path> getActiveFiles() const; /// Replace contents of the draft for \p File with \p Contents. /// If version is empty, one will be automatically assigned. /// Returns the version. std::string addDraft(PathRef File, llvm::StringRef Version, StringRef Contents); /// Remove the draft from the store. void removeDraft(PathRef File); llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> asVFS() const; private: struct DraftAndTime { Draft D; std::time_t MTime; }; mutable std::mutex Mutex; llvm::StringMap<DraftAndTime> Drafts; }; } // namespace clangd } // namespace clang #endif