26 if (
I != Container.end() &&
I->getInstallName() ==
InstallName)
33typename C::iterator addEntry(
C &Container,
const Target &Target_) {
38 if ((Iter != std::end(Container)) && !(Target_ < *Iter))
41 return Container.insert(Iter, Target_);
51 auto Client = addEntry(AllowableClients,
InstallName);
63 [](
const std::pair<Target, std::string> &
LHS,
66 if ((Iter != ParentUmbrellas.end()) && !(Target_ < Iter->first)) {
67 Iter->second = std::string(Parent);
71 ParentUmbrellas.emplace(Iter, Target_, std::string(Parent));
76 [](
const std::pair<Target, std::string> &
LHS,
79 if ((Iter != RPaths.end()) && !(InputTarget < Iter->first)) {
80 Iter->second = std::string(
RPath);
84 RPaths.emplace(Iter, InputTarget, std::string(
RPath));
89 [](
const std::pair<Target, std::string> &
LHS,
92 if ((Iter != UUIDs.end()) && !(Target_ < Iter->first)) {
93 Iter->second = std::string(
UUID);
97 UUIDs.emplace(Iter, Target_, std::string(
UUID));
101 std::stringstream Stream;
102 for (
unsigned i = 0; i < 16; ++i) {
103 if (i == 4 || i == 6 || i == 8 || i == 10)
105 Stream << std::setfill(
'0') << std::setw(2) << std::uppercase << std::hex
106 <<
static_cast<int>(
UUID[i]);
112 addEntry(Targets,
Target);
118 return Archs.
has(Target_.Arch);
131 result.first->second->addTarget(
Target);
136 [](
const std::shared_ptr<InterfaceFile> &
LHS,
137 const std::shared_ptr<InterfaceFile> &
RHS) {
138 return LHS->InstallName <
RHS->InstallName;
140 Document->Parent =
this;
141 Documents.insert(Pos, Document);
149 if (Targets != O.Targets)
153 if ((CurrentVersion != O.CurrentVersion) ||
154 (CompatibilityVersion != O.CompatibilityVersion))
156 if (SwiftABIVersion != O.SwiftABIVersion)
158 if (IsTwoLevelNamespace != O.IsTwoLevelNamespace)
160 if (IsAppExtensionSafe != O.IsAppExtensionSafe)
162 if (IsInstallAPI != O.IsInstallAPI)
164 if (ParentUmbrellas != O.ParentUmbrellas)
166 if (AllowableClients != O.AllowableClients)
168 if (ReexportedLibraries != O.ReexportedLibraries)
170 if (Symbols != O.Symbols)
175 if (RPaths != O.RPaths)
179 if (!std::equal(Documents.begin(), Documents.end(), O.Documents.begin(),
181 [](
const std::shared_ptr<InterfaceFile>
LHS,
182 const std::shared_ptr<InterfaceFile>
RHS) {
static bool isYAMLTextStub(const FileType &Kind)
std::pair< llvm::MachO::Target, std::string > UUID
std::pair< iterator, bool > try_emplace(KeyT &&Key, Ts &&... Args)
bool has(Architecture Arch) const
Reference to an interface file.
void addTarget(const Target &Target)
Defines the interface file.
void addDocument(std::shared_ptr< InterfaceFile > &&Document)
Add a library for inlining to top level library.
void addReexportedLibrary(StringRef InstallName, const Target &Target)
Add a re-exported library.
void addParentUmbrella(const Target &Target_, StringRef Parent)
Set the parent umbrella frameworks.
const_target_range targets() const
bool operator==(const InterfaceFile &O) const
The equality is determined by attributes that impact linking compatibilities.
void addTarget(const Target &Target)
Set and add target.
void addUUID(const Target &Target, StringRef UUID)
Add an Target/UUID pair.
void addSymbol(SymbolKind Kind, StringRef Name, const TargetList &Targets, SymbolFlags Flags=SymbolFlags::None)
Add a symbol to the symbols list or extend an existing one.
void addAllowableClient(StringRef InstallName, const Target &Target)
Add an allowable client.
void addRPath(const Target &InputTarget, StringRef RPath)
Set the runpath search paths.
StringRef - Represent a constant reference to a string, i.e.
Target - Wrapper for Target specific information.
A range adaptor for a pair of iterators.
@ C
The default llvm calling convention, compatible with C.
FileType
Defines the file type this file represents.
@ TBD_V1
Text-based stub file (.tbd) version 1.0.
@ TBD_V5
Text-based stub file (.tbd) version 5.0.
This is an optimization pass for GlobalISel generic memory operations.
auto partition_point(R &&Range, Predicate P)
Binary search for the first iterator in a range where a predicate is false.
iterator_range< filter_iterator< detail::IterOfRange< RangeT >, PredicateT > > make_filter_range(RangeT &&Range, PredicateT Pred)
Convenience function that takes a range of elements and a predicate, and return a new filter_iterator...
auto lower_bound(R &&Range, T &&Value)
Provide wrappers to std::lower_bound which take ranges instead of having to pass begin/end explicitly...