mirror of
https://github.com/apple/swift.git
synced 2026-06-27 12:25:55 +02:00
81 lines
1.9 KiB
C++
81 lines
1.9 KiB
C++
//===--- UIdent.h - ---------------------------------------------*- C++ -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See http://swift.org/LICENSE.txt for license information
|
|
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_SOURCEKIT_SUPPORT_UIDENT_H
|
|
#define LLVM_SOURCEKIT_SUPPORT_UIDENT_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Support/Compiler.h"
|
|
|
|
namespace llvm {
|
|
class raw_ostream;
|
|
}
|
|
|
|
namespace SourceKit {
|
|
|
|
/// \brief A string identifier that is uniqued for the process lifetime.
|
|
/// The string identifier should not contain any spaces.
|
|
class UIdent {
|
|
void *Ptr = 0;
|
|
|
|
explicit UIdent(void *Ptr) : Ptr(Ptr) { }
|
|
|
|
public:
|
|
UIdent() = default;
|
|
explicit UIdent(llvm::StringRef Str);
|
|
|
|
bool isValid() const { return Ptr != 0; }
|
|
bool isInvalid() const { return !isValid(); }
|
|
|
|
void *getAsOpaqueValue() const { return Ptr; }
|
|
static UIdent getFromOpaqueValue(void *Val) {
|
|
return UIdent(Val);
|
|
}
|
|
|
|
void setTag(void *Tag);
|
|
void *getTag() const;
|
|
|
|
friend bool operator==(const UIdent &LHS, const UIdent &RHS) {
|
|
return LHS.Ptr == RHS.Ptr;
|
|
}
|
|
friend bool operator!=(const UIdent &LHS, const UIdent &RHS) {
|
|
return !(LHS == RHS);
|
|
}
|
|
|
|
llvm::StringRef getName() const;
|
|
const char *c_str() const;
|
|
|
|
LLVM_ATTRIBUTE_USED void dump() const;
|
|
void print(llvm::raw_ostream &OS) const;
|
|
};
|
|
|
|
class LazyUIdent {
|
|
const char *Name;
|
|
mutable std::atomic<UIdent> UID;
|
|
public:
|
|
LazyUIdent(const char *Name) : Name(Name) { }
|
|
|
|
UIdent get() const {
|
|
if (UID.load().isInvalid())
|
|
UID = UIdent(Name);
|
|
return UID;
|
|
}
|
|
|
|
operator UIdent() const {
|
|
return get();
|
|
}
|
|
};
|
|
|
|
} // namespace SourceKit
|
|
|
|
#endif
|