16b6b8c4fSAdrian McCarthy //===- SymbolStream.cpp - PDB Symbol Stream Access ------------------------===//
26b6b8c4fSAdrian McCarthy //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66b6b8c4fSAdrian McCarthy //
76b6b8c4fSAdrian McCarthy //===----------------------------------------------------------------------===//
86b6b8c4fSAdrian McCarthy 
96b6b8c4fSAdrian McCarthy #include "llvm/DebugInfo/PDB/Native/SymbolStream.h"
106b6b8c4fSAdrian McCarthy 
116b6b8c4fSAdrian McCarthy #include "llvm/DebugInfo/MSF/MappedBlockStream.h"
126b6b8c4fSAdrian McCarthy #include "llvm/Support/Endian.h"
136b6b8c4fSAdrian McCarthy 
146b6b8c4fSAdrian McCarthy using namespace llvm;
156b6b8c4fSAdrian McCarthy using namespace llvm::msf;
166b6b8c4fSAdrian McCarthy using namespace llvm::support;
176b6b8c4fSAdrian McCarthy using namespace llvm::pdb;
186b6b8c4fSAdrian McCarthy 
SymbolStream(std::unique_ptr<MappedBlockStream> Stream)196b6b8c4fSAdrian McCarthy SymbolStream::SymbolStream(std::unique_ptr<MappedBlockStream> Stream)
206b6b8c4fSAdrian McCarthy     : Stream(std::move(Stream)) {}
216b6b8c4fSAdrian McCarthy 
22*3a3cb929SKazu Hirata SymbolStream::~SymbolStream() = default;
236b6b8c4fSAdrian McCarthy 
reload()246b6b8c4fSAdrian McCarthy Error SymbolStream::reload() {
25120faca4SZachary Turner   BinaryStreamReader Reader(*Stream);
266b6b8c4fSAdrian McCarthy 
276b6b8c4fSAdrian McCarthy   if (auto EC = Reader.readArray(SymbolRecords, Stream->getLength()))
286b6b8c4fSAdrian McCarthy     return EC;
296b6b8c4fSAdrian McCarthy 
306b6b8c4fSAdrian McCarthy   return Error::success();
316b6b8c4fSAdrian McCarthy }
326b6b8c4fSAdrian McCarthy 
336b6b8c4fSAdrian McCarthy iterator_range<codeview::CVSymbolArray::Iterator>
getSymbols(bool * HadError) const346b6b8c4fSAdrian McCarthy SymbolStream::getSymbols(bool *HadError) const {
356b6b8c4fSAdrian McCarthy   return llvm::make_range(SymbolRecords.begin(HadError), SymbolRecords.end());
366b6b8c4fSAdrian McCarthy }
376b6b8c4fSAdrian McCarthy 
commit()386b6b8c4fSAdrian McCarthy Error SymbolStream::commit() { return Error::success(); }
3999c6982bSZachary Turner 
readRecord(uint32_t Offset) const4099c6982bSZachary Turner codeview::CVSymbol SymbolStream::readRecord(uint32_t Offset) const {
4199c6982bSZachary Turner   return *SymbolRecords.at(Offset);
4299c6982bSZachary Turner }
43