1 //===- DIATable.cpp - DIA implementation of IPDBTable -----------*- 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 
10 #include "llvm/DebugInfo/PDB/DIA/DIATable.h"
11 #include "llvm/DebugInfo/PDB/DIA/DIAUtils.h"
12 
13 using namespace llvm;
14 using namespace llvm::pdb;
15 
DIATable(CComPtr<IDiaTable> DiaTable)16 DIATable::DIATable(CComPtr<IDiaTable> DiaTable) : Table(DiaTable) {}
17 
getItemCount() const18 uint32_t DIATable::getItemCount() const {
19   LONG Count = 0;
20   return (S_OK == Table->get_Count(&Count)) ? Count : 0;
21 }
22 
getName() const23 std::string DIATable::getName() const {
24   return invokeBstrMethod(*Table, &IDiaTable::get_name);
25 }
26 
getTableType() const27 PDB_TableType DIATable::getTableType() const {
28   CComBSTR Name16;
29   if (S_OK != Table->get_name(&Name16))
30     return PDB_TableType::TableInvalid;
31 
32   if (Name16 == DiaTable_Symbols)
33     return PDB_TableType::Symbols;
34   if (Name16 == DiaTable_SrcFiles)
35     return PDB_TableType::SourceFiles;
36   if (Name16 == DiaTable_Sections)
37     return PDB_TableType::SectionContribs;
38   if (Name16 == DiaTable_LineNums)
39     return PDB_TableType::LineNumbers;
40   if (Name16 == DiaTable_SegMap)
41     return PDB_TableType::Segments;
42   if (Name16 == DiaTable_InjSrc)
43     return PDB_TableType::InjectedSources;
44   if (Name16 == DiaTable_FrameData)
45     return PDB_TableType::FrameData;
46   if (Name16 == DiaTable_InputAssemblyFiles)
47     return PDB_TableType::InputAssemblyFiles;
48   if (Name16 == DiaTable_Dbg)
49     return PDB_TableType::Dbg;
50   return PDB_TableType::TableInvalid;
51 }
52