mirror of
https://github.com/NohamR/Reclass.git
synced 2026-05-10 19:59:21 +00:00
feat: PDB import via RawPDB, no msdia140.dll dependency
Replace DIA SDK COM-based PDB importer with RawPDB (MolecularMatters) which reads PDB files directly via memory-mapped I/O. Adds File menu "Import PDB..." dialog with type filtering, selection, and progress. - Vendor raw_pdb into third_party/ - Two-phase API: enumeratePdbTypes() + importPdbSelected() - Full recursive import of structs/unions/arrays/pointers/bitfields - PDB import dialog with name filter, select-all, type count - Benchmark: 1654 types from ntkrnlmp.pdb in 16ms - Reorganize import/export files into src/imports/
This commit is contained in:
84
third_party/raw_pdb/src/PDB_DirectMSFStream.h
vendored
Normal file
84
third_party/raw_pdb/src/PDB_DirectMSFStream.h
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
// Copyright 2011-2022, Molecular Matters GmbH <office@molecular-matters.com>
|
||||
// See LICENSE.txt for licensing details (2-clause BSD License: https://opensource.org/licenses/BSD-2-Clause)
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Foundation/PDB_Macros.h"
|
||||
|
||||
|
||||
// https://llvm.org/docs/PDB/index.html#the-msf-container
|
||||
// https://llvm.org/docs/PDB/MsfFile.html
|
||||
namespace PDB
|
||||
{
|
||||
// provides direct access to the data of an MSF stream.
|
||||
// inherently thread-safe, the stream doesn't carry any internal offset or similar.
|
||||
// trivial to construct.
|
||||
// slower individual reads, but pays off when not all data of a stream is needed.
|
||||
class PDB_NO_DISCARD DirectMSFStream
|
||||
{
|
||||
public:
|
||||
DirectMSFStream(void) PDB_NO_EXCEPT;
|
||||
explicit DirectMSFStream(const void* data, uint32_t blockSize, const uint32_t* blockIndices, uint32_t streamSize) PDB_NO_EXCEPT;
|
||||
|
||||
PDB_DEFAULT_MOVE(DirectMSFStream);
|
||||
|
||||
// Reads a number of bytes from the stream.
|
||||
void ReadAtOffset(void* destination, size_t size, size_t offset) const PDB_NO_EXCEPT;
|
||||
|
||||
// Reads from the stream.
|
||||
template <typename T>
|
||||
PDB_NO_DISCARD inline T ReadAtOffset(size_t offset) const PDB_NO_EXCEPT
|
||||
{
|
||||
T data;
|
||||
ReadAtOffset(&data, sizeof(T), offset);
|
||||
return data;
|
||||
}
|
||||
|
||||
// Returns the block size of the stream.
|
||||
PDB_NO_DISCARD inline uint32_t GetBlockSize(void) const PDB_NO_EXCEPT
|
||||
{
|
||||
return m_blockSize;
|
||||
}
|
||||
|
||||
// Returns the size of the stream.
|
||||
PDB_NO_DISCARD inline uint32_t GetSize(void) const PDB_NO_EXCEPT
|
||||
{
|
||||
return m_size;
|
||||
}
|
||||
|
||||
private:
|
||||
friend class CoalescedMSFStream;
|
||||
|
||||
struct IndexAndOffset
|
||||
{
|
||||
uint32_t index;
|
||||
uint32_t offsetWithinBlock;
|
||||
};
|
||||
|
||||
// Returns the block index and offset within the block that correspond to the given offset.
|
||||
PDB_NO_DISCARD IndexAndOffset GetBlockIndexForOffset(uint32_t offset) const PDB_NO_EXCEPT;
|
||||
|
||||
// Returns the offset into the data that corresponds to the given indices and offset within a block.
|
||||
PDB_NO_DISCARD size_t GetDataOffsetForIndexAndOffset(const IndexAndOffset& indexAndOffset) const PDB_NO_EXCEPT;
|
||||
|
||||
// Provides read-only access to the memory-mapped data.
|
||||
PDB_NO_DISCARD inline const void* GetData(void) const PDB_NO_EXCEPT
|
||||
{
|
||||
return m_data;
|
||||
}
|
||||
|
||||
// Provides read-only access to the block indices.
|
||||
PDB_NO_DISCARD inline const uint32_t* GetBlockIndices(void) const PDB_NO_EXCEPT
|
||||
{
|
||||
return m_blockIndices;
|
||||
}
|
||||
|
||||
const void* m_data;
|
||||
const uint32_t* m_blockIndices;
|
||||
uint32_t m_blockSize;
|
||||
uint32_t m_size;
|
||||
uint32_t m_blockSizeLog2;
|
||||
|
||||
PDB_DISABLE_COPY(DirectMSFStream);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user