MQLplus/lib_mqlplus/mql4_compatibility/lib_mql4_Array.mqh
super.admin 466f9ca5c5 convert
2025-05-30 16:09:52 +02:00

169 lines
No EOL
4.9 KiB
MQL5

#ifndef LIB_MQLPLUS_MQL4_COMPATIBILITY_ARRAY_MQH_INCLUDED
#define LIB_MQLPLUS_MQL4_COMPATIBILITY_ARRAY_MQH_INCLUDED
#property version "1.0";
#property strict
/**********************************************************************************
* Copyright (C) 2010-2022 Dominik Egert <info@freie-netze.de>
*
* This file is the MQL4 backward compatibility include file.
*
* MQLplus, including this file may not be copied and/or distributed
* without explecit permit by the author.
* Author Dominik Egert / Freie Netze UG.
**********************************************************************************
*
* Version: 1.0
* State: development
*
* File information
* ================
*
*
*
*/
#ifdef DBG_MSG_TRACE_FILE_LOADER
DBG_MSG_TRACE_FILE_LOADER;
#endif
//*********************************************************************************************************************************************************/
//
// BEGIN MQL4 compatibility additions
//
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible ArrayPrint() |
//+------------------------------------------------------------------+
template <typename T>
void ArrayPrint(const T& array[], uint _digits = -1, const string separator = NULL, const ulong start = 0, const ulong count = WHOLE_ARRAY, const ulong flags = ARRAYPRINT_HEADER | ARRAYPRINT_INDEX | ARRAYPRINT_LIMIT | ARRAYPRINT_ALIGN)
{
// Local init
const uint digits = (_digits == ((uint)-1)) ? _Digits : _digits;
// Needs implementation
printf("Function not implemented: %s", __FUNCTION__);
// Return
return;
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible ArrayInsert() |
//+------------------------------------------------------------------+
template <typename T>
const bool ArrayInsert(T& dst_array[], const T& src_array[], const uint dst_start, const uint src_start = 0, const uint count = WHOLE_ARRAY)
{
// Local init
T tmp_arr[];
// Copy array data
ArrayCopy(tmp_arr, dst_array, 0, dst_start);
ArrayCopy(tmp_arr, src_array, dst_start, src_start, count);
ArrayCopy(tmp_arr, dst_array, dst_start + count, dst_start);
// Return
return(true);
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible ArrayRemove() |
//+------------------------------------------------------------------+
template <typename T>
const bool ArrayRemove(T& array[], const uint start, const uint count = WHOLE_ARRAY)
{
// Local init
const int stop = ArraySize(array);
int ptr = (int)(start + count);
// Shortcut whole array
if(count == WHOLE_ARRAY)
{ return(ArrayResize(array, start) == start); }
// Loop array
for(int cnt = (int)start; (cnt < stop) && !_StopFlag; cnt++)
{
array[cnt] = array[ptr];
ptr++;
}
// Adjust size
return(ArrayResize(array, stop - count) == (stop - count));
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible ArrayReverse() |
//+------------------------------------------------------------------+
template <typename T>
const bool ArrayReverse(T& array[], const uint start, const uint count = WHOLE_ARRAY)
{
// Local init
int high_ptr = (count == WHOLE_ARRAY) ? ArraySize(array) : (start + count);
T tmp_val;
// Reverse range of array
for(int low_ptr = start; (low_ptr < high_ptr) && !_StopFlag; low_ptr++)
{
tmp_val = array[low_ptr];
array[low_ptr] = array[high_ptr];
array[high_ptr] = tmp_val;
high_ptr--;
}
// Return
return(true);
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible ArraySwap() |
//+------------------------------------------------------------------+
template <typename T>
const bool ArraySwap(T& array1[], T& array2[])
{
// Local init
T tmp_arr[];
// Create copy
ArrayCopy(tmp_arr, array1);
ArrayCopy(array1, array2);
ArrayFree(array2);
ArrayCopy(array2, tmp_arr);
ArrayFree(tmp_arr);
// Return
return(true);
}
//
// END MQL compatibility */
//*********************************************************************************************************************************************************/
#endif // LIB_MQLPLUS_MQL4_COMPATIBILITY_ARRAY_MQH_INCLUDED