summaryrefslogtreecommitdiffstats
path: root/Tools/compareTraces/TraceReader.h
blob: 8d1e1f2fbfe39307f361170a92257f48ef46d813 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#pragma once
#include "../../Whisper/Utils/Trace/TraceStructures.h"
#include <atlstr.h>
#include <atlfile.h>

namespace Tracing
{
	class TraceReader
	{
		const uint8_t* payloadPointer = nullptr;
		const sTraceItem* items = nullptr;
		size_t countItems = 0;
		size_t countStrings = 0;
		const uint32_t* stringIndex = nullptr;
		const char* stringData = nullptr;

		CAtlFile file;
		CAtlFileMapping<uint8_t> mapping;

	public:

		TraceReader() = default;
		~TraceReader() = default;

		HRESULT open( LPCTSTR path );
		size_t size() const { return countItems; }
		const sTraceItem& operator[]( size_t idx ) const;
		CStringA getName( const sTraceItem& item ) const;

		const void* payload( const sTraceItem& item ) const
		{
			return payloadPointer + item.payloadOffset;
		}
	};
}