1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4//
5// File: HotHeapsDirectoryIterator.h
6//
7
8//
9// Class code:MetaData::HotHeapsDirectoryIterator represents an iterator through hot heaps directory
10// (code:HotHeapsDirectory).
11//
12// ======================================================================================
13
14#pragma once
15
16#include "external.h"
17#include "heapindex.h"
18#include "hotheap.h"
19
20namespace MetaData
21{
22
23// --------------------------------------------------------------------------------------
24//
25// This class represents an iterator through hot heaps directory (code:HotHeapsDirectory), i.e. through an
26// array of code:HotHeapsDirectoryEntry.
27//
28class HotHeapsDirectoryIterator
29{
30private:
31 //
32 // Private data
33 //
34
35 // Remaining data from the heaps directory. On each iteration this will be shrinked (the
36 // code:HotHeapsDirectoryEntry will be skipped).
37 DataBuffer m_RemainingHeapsDirectoryData;
38 // Data for the hot heaps. It has to end exactly where heaps directory starts.
39 DataBuffer m_HotHeapsData;
40
41private:
42 //
43 // Operations with restricted access
44 //
45
46 // code:HotMetaData is the only class allowed to create this iteration.
47 friend class HotMetaData;
48
49 // Initialize iteration on heaps directory (hotHeapsDirectoryData) with heap hot data (hotHeapsData).
50 // The caller guarantees that the heap hot data end where heaps directory beggins.
51 void Initialize(
52 DataBuffer hotHeapsDirectoryData,
53 DataBuffer hotHeapsData);
54
55public:
56 //
57 // Operations
58 //
59
60 // Creates empty iterator.
61 HotHeapsDirectoryIterator();
62
63 // S_OK, S_FALSE, error code (clears the HotHeap if not S_OK)
64 __checkReturn
65 HRESULT GetNext(
66 HotHeap *pHotHeap,
67 HeapIndex *pHotHeapIndex);
68
69}; // class HotHeapsDirectoryIterator
70
71}; // namespace MetaData
72