//===- clang/Basic/DirectoryEntry.h - Directory references ------*- 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 // //===----------------------------------------------------------------------===// /// /// \file /// Defines interfaces for clang::DirectoryEntry and clang::DirectoryEntryRef. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_BASIC_DIRECTORYENTRY_H #define LLVM_CLANG_BASIC_DIRECTORYENTRY_H #include "clang/Basic/CustomizableOptional.h" #include "clang/Basic/LLVM.h" #include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/Hashing.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/ErrorOr.h" #include <optional> #include <utility> namespace clang { namespace FileMgr { template <class RefTy> class MapEntryOptionalStorage; } // end namespace FileMgr /// Cached information about one directory (either on disk or in /// the virtual file system). class DirectoryEntry { … }; /// A reference to a \c DirectoryEntry that includes the name of the directory /// as it was accessed by the FileManager's client. class DirectoryEntryRef { … }; OptionalDirectoryEntryRef; namespace FileMgr { /// Customized storage for refs derived from map entires in FileManager, using /// the private optional_none_tag to keep it to the size of a single pointer. template <class RefTy> class MapEntryOptionalStorage { … }; } // end namespace FileMgr namespace optional_detail { /// Customize OptionalStorage<DirectoryEntryRef> to use DirectoryEntryRef and /// its optional_none_tag to keep it the size of a single pointer. template <> class OptionalStorage<clang::DirectoryEntryRef> : public clang::FileMgr::MapEntryOptionalStorage<clang::DirectoryEntryRef> { … }; static_assert …; static_assert …; } // end namespace optional_detail } // namespace clang namespace llvm { template <> struct PointerLikeTypeTraits<clang::DirectoryEntryRef> { … }; /// Specialisation of DenseMapInfo for DirectoryEntryRef. template <> struct DenseMapInfo<clang::DirectoryEntryRef> { … }; } // end namespace llvm #endif // LLVM_CLANG_BASIC_DIRECTORYENTRY_H