================ @@ -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. +class NestedBuildNamespace { + friend class SerializationFormat; + + std::vector<BuildNamespace> Namespaces; + +public: + NestedBuildNamespace() = default; + + explicit NestedBuildNamespace(const std::vector<BuildNamespace>& Namespaces) + : Namespaces(Namespaces) {} + + explicit NestedBuildNamespace(const BuildNamespace& N) { + Namespaces.push_back(N); + } + + static NestedBuildNamespace makeTU(llvm::StringRef CompilationId); + + NestedBuildNamespace makeQualified(NestedBuildNamespace Namespace) { + auto Copy = *this; + for (const auto& N : Namespace.Namespaces) + Copy.Namespaces.push_back(N); ---------------- steakhal wrote:
Could we use `llvm::append_range` here? We know ahead of time how many elements we add. Could we reserve? https://github.com/llvm/llvm-project/pull/169131 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
