15ffd83dbSDimitry Andric //==- NativeEnumLineNumbers.cpp - Native Type Enumerator impl ----*- C++ -*-==// 25ffd83dbSDimitry Andric // 35ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 55ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65ffd83dbSDimitry Andric // 75ffd83dbSDimitry Andric //===----------------------------------------------------------------------===// 85ffd83dbSDimitry Andric 95ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeEnumLineNumbers.h" 105ffd83dbSDimitry Andric 11*81ad6265SDimitry Andric #include "llvm/DebugInfo/CodeView/CodeView.h" 125ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h" 135ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeLineNumber.h" 14*81ad6265SDimitry Andric 15*81ad6265SDimitry Andric #include <vector> 165ffd83dbSDimitry Andric 175ffd83dbSDimitry Andric using namespace llvm; 185ffd83dbSDimitry Andric using namespace llvm::codeview; 195ffd83dbSDimitry Andric using namespace llvm::pdb; 205ffd83dbSDimitry Andric NativeEnumLineNumbers(std::vector<NativeLineNumber> LineNums)215ffd83dbSDimitry AndricNativeEnumLineNumbers::NativeEnumLineNumbers( 225ffd83dbSDimitry Andric std::vector<NativeLineNumber> LineNums) 235ffd83dbSDimitry Andric : Lines(std::move(LineNums)), Index(0) {} 245ffd83dbSDimitry Andric getChildCount() const255ffd83dbSDimitry Andricuint32_t NativeEnumLineNumbers::getChildCount() const { 265ffd83dbSDimitry Andric return static_cast<uint32_t>(Lines.size()); 275ffd83dbSDimitry Andric } 285ffd83dbSDimitry Andric 295ffd83dbSDimitry Andric std::unique_ptr<IPDBLineNumber> getChildAtIndex(uint32_t N) const305ffd83dbSDimitry AndricNativeEnumLineNumbers::getChildAtIndex(uint32_t N) const { 315ffd83dbSDimitry Andric if (N >= getChildCount()) 325ffd83dbSDimitry Andric return nullptr; 335ffd83dbSDimitry Andric return std::make_unique<NativeLineNumber>(Lines[N]); 345ffd83dbSDimitry Andric } 355ffd83dbSDimitry Andric getNext()365ffd83dbSDimitry Andricstd::unique_ptr<IPDBLineNumber> NativeEnumLineNumbers::getNext() { 375ffd83dbSDimitry Andric return getChildAtIndex(Index++); 385ffd83dbSDimitry Andric } 395ffd83dbSDimitry Andric reset()405ffd83dbSDimitry Andricvoid NativeEnumLineNumbers::reset() { Index = 0; } 41