1*5ffd83dbSDimitry Andric //==- NativeEnumLineNumbers.cpp - Native Type Enumerator impl ----*- C++ -*-==// 2*5ffd83dbSDimitry Andric // 3*5ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*5ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*5ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*5ffd83dbSDimitry Andric // 7*5ffd83dbSDimitry Andric //===----------------------------------------------------------------------===// 8*5ffd83dbSDimitry Andric 9*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeEnumLineNumbers.h" 10*5ffd83dbSDimitry Andric 11*5ffd83dbSDimitry Andric #include "llvm/ADT/STLExtras.h" 12*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h" 13*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h" 14*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h" 15*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeLineNumber.h" 16*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeSession.h" 17*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeSourceFile.h" 18*5ffd83dbSDimitry Andric 19*5ffd83dbSDimitry Andric using namespace llvm; 20*5ffd83dbSDimitry Andric using namespace llvm::codeview; 21*5ffd83dbSDimitry Andric using namespace llvm::pdb; 22*5ffd83dbSDimitry Andric NativeEnumLineNumbers(std::vector<NativeLineNumber> LineNums)23*5ffd83dbSDimitry AndricNativeEnumLineNumbers::NativeEnumLineNumbers( 24*5ffd83dbSDimitry Andric std::vector<NativeLineNumber> LineNums) 25*5ffd83dbSDimitry Andric : Lines(std::move(LineNums)), Index(0) {} 26*5ffd83dbSDimitry Andric getChildCount() const27*5ffd83dbSDimitry Andricuint32_t NativeEnumLineNumbers::getChildCount() const { 28*5ffd83dbSDimitry Andric return static_cast<uint32_t>(Lines.size()); 29*5ffd83dbSDimitry Andric } 30*5ffd83dbSDimitry Andric 31*5ffd83dbSDimitry Andric std::unique_ptr<IPDBLineNumber> getChildAtIndex(uint32_t N) const32*5ffd83dbSDimitry AndricNativeEnumLineNumbers::getChildAtIndex(uint32_t N) const { 33*5ffd83dbSDimitry Andric if (N >= getChildCount()) 34*5ffd83dbSDimitry Andric return nullptr; 35*5ffd83dbSDimitry Andric return std::make_unique<NativeLineNumber>(Lines[N]); 36*5ffd83dbSDimitry Andric } 37*5ffd83dbSDimitry Andric getNext()38*5ffd83dbSDimitry Andricstd::unique_ptr<IPDBLineNumber> NativeEnumLineNumbers::getNext() { 39*5ffd83dbSDimitry Andric return getChildAtIndex(Index++); 40*5ffd83dbSDimitry Andric } 41*5ffd83dbSDimitry Andric reset()42*5ffd83dbSDimitry Andricvoid NativeEnumLineNumbers::reset() { Index = 0; } 43