MQL5-SyntheticTestHarness/MQL5/Include/SyntheticTestHarness/CArrayProvider.mqh
Alex David Hernandez Maturrano 0470026795 Symlink generator and improvements
2026-07-18 22:59:46 -03:00

83 lines
3.3 KiB
MQL5

//+------------------------------------------------------------------+
//| CArrayProvider.mqh |
//| Synthetic Test Harness for MetaTrader 5 |
//| Institutional Architecture in MQL5 - Part 1 Series |
//+------------------------------------------------------------------+
#ifndef SYNTHETIC_TEST_HARNESS_CARRAY_PROVIDER_MQH
#define SYNTHETIC_TEST_HARNESS_CARRAY_PROVIDER_MQH
#include "ITickProvider.mqh"
//+------------------------------------------------------------------+
//| CArrayProvider: reads synthetic ticks from an in-memory array. |
//| |
//| Usage: define your scenario as a MockTick[], pass it to the |
//| constructor, and the provider iterates through it sequentially. |
//| Call Reset() to re-run the same scenario without re-creating |
//| the provider. |
//| |
//| Ownership: copies the source array internally (owns its data). |
//+------------------------------------------------------------------+
class CArrayProvider : public ITickProvider
{
private:
MockTick m_ticks[];
int m_current_index;
int m_tick_count;
public:
//+---------------------------------------------------------------+
//| Constructor: copies the source array so the provider owns its |
//| data. The caller's array can be safely discarded after this. |
//+---------------------------------------------------------------+
CArrayProvider(MockTick &source_ticks[])
{
m_tick_count = ArraySize(source_ticks);
m_current_index = 0;
ArrayResize(m_ticks, m_tick_count);
for(int i = 0; i < m_tick_count; i++)
m_ticks[i] = source_ticks[i];
}
//+---------------------------------------------------------------+
//| HasNext: returns true if unprocessed ticks remain. |
//+---------------------------------------------------------------+
bool HasNext(void)
{
return(m_current_index < m_tick_count);
}
//+---------------------------------------------------------------+
//| GetNextTick: fills out_tick and advances the cursor by one. |
//| Returns false when all ticks have been consumed. |
//+---------------------------------------------------------------+
bool GetNextTick(MockTick &out_tick)
{
if(!HasNext())
return(false);
out_tick = m_ticks[m_current_index];
m_current_index++;
return(true);
}
//+---------------------------------------------------------------+
//| Reset: rewinds to the first tick for re-running scenarios. |
//+---------------------------------------------------------------+
void Reset(void)
{
m_current_index = 0;
}
//+---------------------------------------------------------------+
//| GetTickCount: returns the total number of ticks in the array. |
//+---------------------------------------------------------------+
int GetTickCount(void)
{
return(m_tick_count);
}
};
//+------------------------------------------------------------------+
#endif