forked from rosh/MQL5Book
80 lines
2 KiB
MQL5
80 lines
2 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| ArraySwapSimple.mq5 |
| |||
//| Copyright 2021, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
| |||
#define PRT(A) Print(#A, "=", (A))
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Simple class for array processing |
| |||
//+------------------------------------------------------------------+
| |||
template<typename T>
| |||
class Worker
| |||
{
| |||
T array[];
| |||
| |||
public:
| |||
Worker(T &source[])
| |||
{
| |||
// ArrayCopy(array, source); // overheads
| |||
ArraySwap(source, array);
| |||
}
| |||
| |||
bool process(const int mode)
| |||
{
| |||
if(ArraySize(array) == 0) return false;
| |||
switch(mode)
| |||
{
| |||
case -4:
| |||
// TODO: shuffle
| |||
break;
| |||
case -3:
| |||
// TODO: apply logarithmic scale
| |||
break;
| |||
case -2:
| |||
// TODO: add gaussian noise to array
| |||
break;
| |||
case -1:
| |||
ArrayReverse(array);
| |||
break;
| |||
// ...
| |||
}
| |||
return true;
| |||
}
| |||
| |||
T operator[](int i)
| |||
{
| |||
return array[i];
| |||
}
| |||
| |||
void get(T &result[])
| |||
{
| |||
ArraySwap(array, result);
| |||
}
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
double data[];
| |||
ArrayResize(data, 3);
| |||
data[0] = 1;
| |||
data[1] = 2;
| |||
data[2] = 3;
| |||
| |||
PRT(ArraySize(data)); // 3
| |||
Worker<double> simple(data);
| |||
PRT(ArraySize(data)); // 0
| |||
simple.process(-1);
| |||
| |||
// can access elements by index
| |||
// Print(simple[0]);
| |||
| |||
double res[];
| |||
simple.get(res);
| |||
ArrayPrint(res); // 3.00000 2.00000 1.00000
| |||
}
| |||
//+------------------------------------------------------------------+
|