9#ifndef LLVM_DEBUGINFO_PDB_CONCRETESYMBOLENUMERATOR_H
10#define LLVM_DEBUGINFO_PDB_CONCRETESYMBOLENUMERATOR_H
22template <
typename ChildType>
26 : Enumerator(
std::
move(SymbolEnumerator)) {}
31 return Enumerator->getChildCount();
35 std::unique_ptr<PDBSymbol> Child = Enumerator->getChildAtIndex(
Index);
36 return unique_dyn_cast_or_null<ChildType>(Child);
39 std::unique_ptr<ChildType>
getNext()
override {
40 return unique_dyn_cast_or_null<ChildType>(Enumerator->getNext());
43 void reset()
override { Enumerator->reset(); }
47 std::unique_ptr<IPDBEnumSymbols> Enumerator;
~ConcreteSymbolEnumerator() override=default
std::unique_ptr< ChildType > getNext() override
std::unique_ptr< ChildType > getChildAtIndex(uint32_t Index) const override
uint32_t getChildCount() const override
ConcreteSymbolEnumerator(std::unique_ptr< IPDBEnumSymbols > SymbolEnumerator)
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.
Implement std::hash so that hash_code can be used in STL containers.