//==- NativeEnumTypes.cpp - Native Type Enumerator impl ----------*- C++ -*-==// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/PDB/Native/NativeEnumTypes.h" #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h" #include "llvm/DebugInfo/PDB/Native/NativeEnumSymbol.h" #include "llvm/DebugInfo/PDB/Native/NativeSession.h" #include "llvm/DebugInfo/PDB/PDBSymbol.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h" namespace llvm { namespace pdb { NativeEnumTypes::NativeEnumTypes(NativeSession &PDBSession, codeview::LazyRandomTypeCollection &Types, codeview::TypeLeafKind Kind) : Matches(), Index(0), Session(PDBSession), Kind(Kind) { for (auto Index = Types.getFirst(); Index; Index = Types.getNext(Index.getValue())) { if (Types.getType(Index.getValue()).kind() == Kind) Matches.push_back(Index.getValue()); } } NativeEnumTypes::NativeEnumTypes( NativeSession &PDBSession, const std::vector &Matches, codeview::TypeLeafKind Kind) : Matches(Matches), Index(0), Session(PDBSession), Kind(Kind) {} uint32_t NativeEnumTypes::getChildCount() const { return static_cast(Matches.size()); } std::unique_ptr NativeEnumTypes::getChildAtIndex(uint32_t Index) const { if (Index < Matches.size()) return Session.createEnumSymbol(Matches[Index]); return nullptr; } std::unique_ptr NativeEnumTypes::getNext() { return getChildAtIndex(Index++); } void NativeEnumTypes::reset() { Index = 0; } NativeEnumTypes *NativeEnumTypes::clone() const { return new NativeEnumTypes(Session, Matches, Kind); } } // namespace pdb } // namespace llvm