LLVM  3.7.0
DIADataStream.cpp
Go to the documentation of this file.
1 //===- DIADataStream.cpp - DIA implementation of IPDBDataStream -*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
12 
13 using namespace llvm;
14 
15 DIADataStream::DIADataStream(CComPtr<IDiaEnumDebugStreamData> DiaStreamData)
16  : StreamData(DiaStreamData) {}
17 
19  LONG Count = 0;
20  return (S_OK == StreamData->get_Count(&Count)) ? Count : 0;
21 }
22 
23 std::string DIADataStream::getName() const {
24  CComBSTR Name16;
25  if (S_OK != StreamData->get_name(&Name16))
26  return std::string();
27 
28  std::string Name8;
29  llvm::ArrayRef<char> Name16Bytes(reinterpret_cast<char *>(Name16.m_str),
30  Name16.ByteLength());
31  if (!llvm::convertUTF16ToUTF8String(Name16Bytes, Name8))
32  return std::string();
33  return Name8;
34 }
35 
37 DIADataStream::getItemAtIndex(uint32_t Index) const {
39  DWORD RecordSize = 0;
40  StreamData->Item(Index, 0, &RecordSize, nullptr);
41  if (RecordSize == 0)
43 
44  Record.resize(RecordSize);
45  if (S_OK != StreamData->Item(Index, RecordSize, &RecordSize, &Record[0]))
47  return Record;
48 }
49 
51  Record.clear();
52  DWORD RecordSize = 0;
53  ULONG CountFetched = 0;
54  StreamData->Next(1, 0, &RecordSize, nullptr, &CountFetched);
55  if (RecordSize == 0)
56  return false;
57 
58  Record.resize(RecordSize);
59  if (S_OK ==
60  StreamData->Next(1, RecordSize, &RecordSize, &Record[0], &CountFetched))
61  return false;
62  return true;
63 }
64 
65 void DIADataStream::reset() { StreamData->Reset(); }
66 
68  CComPtr<IDiaEnumDebugStreamData> EnumeratorClone;
69  if (S_OK != StreamData->Clone(&EnumeratorClone))
70  return nullptr;
71 
72  return new DIADataStream(EnumeratorClone);
73 }
std::string getName() const override
bool getNext(RecordType &Record) override
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: ArrayRef.h:31
DIADataStream * clone() const override
bool convertUTF16ToUTF8String(ArrayRef< char > SrcBytes, std::string &Out)
llvm::Optional< RecordType > getItemAtIndex(uint32_t Index) const override
void reset() override
uint32_t getRecordCount() const override
void resize(size_type N)
Definition: SmallVector.h:376
DIADataStream(CComPtr< IDiaEnumDebugStreamData > DiaStreamData)