summaryrefslogtreecommitdiff
path: root/src/md/datasource/datatargetreader.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/md/datasource/datatargetreader.h')
-rw-r--r--src/md/datasource/datatargetreader.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/md/datasource/datatargetreader.h b/src/md/datasource/datatargetreader.h
new file mode 100644
index 0000000000..18c94a7576
--- /dev/null
+++ b/src/md/datasource/datatargetreader.h
@@ -0,0 +1,59 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+
+#ifndef _MD_DATA_TARGET_READER_
+#define _MD_DATA_TARGET_READER_
+
+#include "cor.h"
+#include "cordebug.h"
+
+class DataTargetReader;
+
+class TargetObject
+{
+public:
+ virtual HRESULT ReadFrom(DataTargetReader & reader) = 0;
+};
+
+class DataTargetReader
+{
+public:
+ DataTargetReader(CORDB_ADDRESS remoteAddressCursor, ICorDebugDataTarget* pDataTarget, DWORD targetDefines, DWORD mdStructuresVersion);
+ DataTargetReader(const DataTargetReader & otherReader);
+ DataTargetReader & operator=(const DataTargetReader & rhs);
+ ~DataTargetReader();
+
+ HRESULT Read(TargetObject* pTargetObjectValue);
+ HRESULT ReadPointer(TargetObject* pTargetObjectValue);
+ HRESULT ReadPointer(CORDB_ADDRESS* pPointerValue);
+ HRESULT SkipPointer();
+ HRESULT Read8(BYTE* pByteValue);
+ HRESULT Skip8();
+ HRESULT Read32(ULONG32* pUlong32Value);
+ HRESULT Skip32();
+ HRESULT Read64(ULONG64* pUlong64Value);
+ HRESULT Skip64();
+ HRESULT ReadBytes(BYTE* pBuffer, DWORD cbBuffer);
+ HRESULT SkipBytes(DWORD cbBuffer);
+ void Align(DWORD alignmentBytes);
+ void AlignBase();
+
+ DataTargetReader CreateReaderAt(CORDB_ADDRESS remoteAddressCursor);
+
+ DWORD GetMDStructuresVersion();
+ BOOL IsDefined(DWORD define);
+
+
+private:
+ HRESULT GetRemotePointerSize(ULONG32* pPointerSize);
+ ICorDebugDataTarget* m_pDataTarget;
+ ULONG32 m_remotePointerSize;
+ CORDB_ADDRESS m_remoteAddressCursor;
+ ULONG32 m_currentStructureAlign;
+ DWORD m_targetDefines;
+ DWORD m_mdStructuresVersion;
+};
+
+#endif // _MD_DATA_TARGET_READER_