10 #ifndef LLVM_DEBUGINFO_PDB_CONCRETESYMBOLENUMERATOR_H
11 #define LLVM_DEBUGINFO_PDB_CONCRETESYMBOLENUMERATOR_H
23 template <
typename ChildType>
27 : Enumerator(std::move(SymbolEnumerator)) {}
32 return Enumerator->getChildCount();
36 std::unique_ptr<PDBSymbol> Child = Enumerator->getChildAtIndex(Index);
37 return make_concrete_child(std::move(Child));
40 std::unique_ptr<ChildType>
getNext()
override {
41 std::unique_ptr<PDBSymbol> Child = Enumerator->getNext();
42 return make_concrete_child(std::move(Child));
45 void reset()
override { Enumerator->reset(); }
48 std::unique_ptr<IPDBEnumSymbols> WrappedClone(Enumerator->clone());
53 std::unique_ptr<ChildType>
54 make_concrete_child(std::unique_ptr<PDBSymbol> Child)
const {
55 ChildType *ConcreteChild = dyn_cast_or_null<ChildType>(Child.release());
56 return std::unique_ptr<ChildType>(ConcreteChild);
59 std::unique_ptr<IPDBEnumSymbols> Enumerator;
65 #endif // LLVM_DEBUGINFO_PDB_CONCRETESYMBOLENUMERATOR_H
std::unique_ptr< ChildType > getChildAtIndex(uint32_t Index) const override
uint32_t getChildCount() const override
std::unique_ptr< ChildType > getNext() override
~ConcreteSymbolEnumerator() override=default
ConcreteSymbolEnumerator< ChildType > * clone() const override
ConcreteSymbolEnumerator(std::unique_ptr< IPDBEnumSymbols > SymbolEnumerator)