10 #ifndef LLVM_DEBUGINFO_PDB_CONCRETESYMBOLENUMERATOR_H
11 #define LLVM_DEBUGINFO_PDB_CONCRETESYMBOLENUMERATOR_H
19 template <
typename ChildType>
23 : Enumerator(std::move(SymbolEnumerator)) {}
28 return Enumerator->getChildCount();
32 std::unique_ptr<PDBSymbol> Child = Enumerator->getChildAtIndex(Index);
33 return make_concrete_child(std::move(Child));
36 std::unique_ptr<ChildType>
getNext()
override {
37 std::unique_ptr<PDBSymbol> Child = Enumerator->getNext();
38 return make_concrete_child(std::move(Child));
41 void reset()
override { Enumerator->reset(); }
44 std::unique_ptr<IPDBEnumSymbols> WrappedClone(Enumerator->clone());
49 std::unique_ptr<ChildType>
50 make_concrete_child(std::unique_ptr<PDBSymbol> Child)
const {
51 ChildType *ConcreteChild = dyn_cast_or_null<ChildType>(Child.release());
52 return std::unique_ptr<ChildType>(ConcreteChild);
55 std::unique_ptr<IPDBEnumSymbols> Enumerator;
uint32_t getChildCount() const override
ConcreteSymbolEnumerator(std::unique_ptr< IPDBEnumSymbols > SymbolEnumerator)
ConcreteSymbolEnumerator< ChildType > * clone() const override
std::unique_ptr< ChildType > getNext() override
~ConcreteSymbolEnumerator() override
std::unique_ptr< ChildType > getChildAtIndex(uint32_t Index) const override