================ @@ -0,0 +1,84 @@ +//===- BuildNamespace.h -----------------------------------------*- 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_ANALYSIS_SCALABLE_BUILD_NAMESPACE_H +#define LLVM_CLANG_ANALYSIS_SCALABLE_BUILD_NAMESPACE_H + +#include "llvm/ADT/StringRef.h" +#include <optional> +#include <string> +#include <vector> + +namespace clang { +namespace ssaf { + +enum class BuildNamespaceKind : unsigned short { + CompilationUnit, + LinkUnit +}; + +std::string toString(BuildNamespaceKind BNK); + +std::optional<BuildNamespaceKind> parseBuildNamespaceKind(llvm::StringRef Str); + +/// Represents a single step in the build process. +class BuildNamespace { + BuildNamespaceKind Kind; + std::string Name; +public: + BuildNamespace(BuildNamespaceKind Kind, llvm::StringRef Name) + : Kind(Kind), Name(Name.str()) {} + + static BuildNamespace makeTU(llvm::StringRef CompilationId); + + bool operator==(const BuildNamespace& Other) const; + bool operator!=(const BuildNamespace& Other) const; + bool operator<(const BuildNamespace& Other) const; + + friend class SerializationFormat; +}; + +/// Represents a sequence of steps in the build process. ---------------- jkorous-apple wrote:
Let me preface this by saying that the namespace design will possibly evolve when we actually implement entity linking. To some degree this is just an educated guess. We could just use `std::vector<BuildNamespace>` instead of introducing another class but I expect that we will have operations on that type and having this class will allow the interfaces to enforce type correctness and to be self-descriptive. Alternatively, we could have `BuildNamespace` implemented as `std::vector<std::pair<BuildNamespaceKind, std::string>>` and sink the per-element logic to its implementation. So, yes, I can imagine there's only a single type but can you please elaborate on why would you prefer that? https://github.com/llvm/llvm-project/pull/169131 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
