| // Part of the Crubit project, under the Apache License v2.0 with LLVM | 
 | // Exceptions. See /LICENSE for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 |  | 
 | #ifndef DEVTOOLS_RUST_CC_INTEROP_LIFETIME_ANALYSIS_OBJECT_H_ | 
 | #define DEVTOOLS_RUST_CC_INTEROP_LIFETIME_ANALYSIS_OBJECT_H_ | 
 |  | 
 | #include <optional> | 
 | #include <ostream> | 
 | #include <string> | 
 |  | 
 | #include "lifetime_annotations/function_lifetimes.h" | 
 | #include "lifetime_annotations/lifetime.h" | 
 | #include "clang/AST/Type.h" | 
 |  | 
 | namespace clang { | 
 | namespace tidy { | 
 | namespace lifetimes { | 
 |  | 
 | // Any object that has a lifetime. Multiple objects might have the same | 
 | // lifetime, but two equal objects always have the same lifetime. | 
 | // An object may also represent a function whose lifetime signature is | 
 | // known, obtainable by GetFuncLifetimes. | 
 | class Object { | 
 |  public: | 
 |   Object(const Object&) = delete; | 
 |   Object(Object&&) = delete; | 
 |   Object& operator=(const Object&) = delete; | 
 |   Object& operator=(Object&&) = delete; | 
 |  | 
 |   // Creates an object with the given lifetime and type. | 
 |   // This constructor should only be used in tests. Outside of tests, use | 
 |   // one of the ObjectRepository::CreateObject...() functions. | 
 |   Object(Lifetime lifetime, clang::QualType type, | 
 |          std::optional<FunctionLifetimes> func_lifetimes); | 
 |  | 
 |   // Returns the lifetime of the object. | 
 |   Lifetime GetLifetime() const { return lifetime_; } | 
 |  | 
 |   clang::QualType Type() const { return type_; } | 
 |  | 
 |   // Returns a textual representation of the object for debug logging. | 
 |   std::string DebugString() const; | 
 |  | 
 |   // Returns the lifetimes of function that this object represents, if known; | 
 |   // note that lifetimes may not be known even if GetFunc() returns non-null. | 
 |   const std::optional<FunctionLifetimes>& GetFuncLifetimes() const { | 
 |     return func_lifetimes_; | 
 |   } | 
 |  | 
 |  private: | 
 |   Lifetime lifetime_; | 
 |   clang::QualType type_; | 
 |   std::optional<FunctionLifetimes> func_lifetimes_; | 
 | }; | 
 |  | 
 | std::ostream& operator<<(std::ostream& os, Object object); | 
 |  | 
 | }  // namespace lifetimes | 
 | }  // namespace tidy | 
 | }  // namespace clang | 
 |  | 
 | #endif  // DEVTOOLS_RUST_CC_INTEROP_LIFETIME_ANALYSIS_OBJECT_H_ |