[PDB] Get more DIA table enumerators

Rename the original function and make it a static template.

llvm-svn: 328177
This commit is contained in:
Aaron Smith 2018-03-22 03:57:06 +00:00
parent 19a250a7ce
commit 889ee6858f

View File

@ -327,9 +327,10 @@ std::unique_ptr<IPDBEnumTables> DIASession::getEnumTables() const {
return llvm::make_unique<DIAEnumTables>(DiaEnumerator);
}
static CComPtr<IDiaEnumInjectedSources>
getEnumInjectedSources(IDiaSession &Session) {
CComPtr<IDiaEnumInjectedSources> EIS;
template <class T>
static CComPtr<T>
getTableEnumerator(IDiaSession &Session) {
CComPtr<T> Enumerator;
CComPtr<IDiaEnumTables> ET;
CComPtr<IDiaTable> Table;
ULONG Count = 0;
@ -340,15 +341,16 @@ getEnumInjectedSources(IDiaSession &Session) {
while (ET->Next(1, &Table, &Count) == S_OK && Count == 1) {
// There is only one table that matches the given iid
if (S_OK ==
Table->QueryInterface(__uuidof(IDiaEnumInjectedSources), (void **)&EIS))
Table->QueryInterface(__uuidof(T), (void **)&Enumerator))
break;
Table.Release();
}
return EIS;
return Enumerator;
}
std::unique_ptr<IPDBEnumInjectedSources>
DIASession::getInjectedSources() const {
CComPtr<IDiaEnumInjectedSources> Files = getEnumInjectedSources(*Session);
CComPtr<IDiaEnumInjectedSources> Files =
getTableEnumerator<IDiaEnumInjectedSources>(*Session);
if (!Files)
return nullptr;