27 std::vector<codeview::TypeLeafKind> Kinds)
28 :
Index(0), Session(PDBSession) {
29 std::optional<TypeIndex> TI = Types.getFirst();
31 CVType CVT = Types.getType(*TI);
36 Matches.push_back(*TI);
37 }
else if (K == TypeLeafKind::LF_MODIFIER) {
40 CVType UnmodifiedCVT = Types.getType(ModifiedTI);
45 Matches.push_back(*TI);
48 TI = Types.getNext(*TI);
53 std::vector<codeview::TypeIndex> Indices)
54 : Matches(
std::
move(Indices)),
Index(0), Session(PDBSession) {}
57 return static_cast<uint32_t>(Matches.size());
61 if (
N < Matches.size()) {
Provides amortized O(1) random access to a CodeView type stream.
std::unique_ptr< PDBSymbol > getChildAtIndex(uint32_t Index) const override
NativeEnumTypes(NativeSession &Session, codeview::LazyRandomTypeCollection &TypeCollection, std::vector< codeview::TypeLeafKind > Kinds)
uint32_t getChildCount() const override
std::unique_ptr< PDBSymbol > getNext() override
SymbolCache & getSymbolCache()
std::unique_ptr< PDBSymbol > getSymbolById(SymIndexId SymbolId) const
SymIndexId findSymbolByTypeIndex(codeview::TypeIndex TI) const
bool isUdtForwardRef(CVType CVT)
Given an arbitrary codeview type, determine if it is an LF_STRUCTURE, LF_CLASS, LF_INTERFACE,...
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
TypeIndex getModifiedType(const CVType &CVT)
Given a CVType which is assumed to be an LF_MODIFIER, return the TypeIndex of the type that the LF_MO...
This is an optimization pass for GlobalISel generic memory operations.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
Implement std::hash so that hash_code can be used in STL containers.