Download MetaTrader 5

AddArray

Adds elements from one array to the end of another.

bool  AddArray(
   const CArrayObj *  src      // pointer to the source array
   )

Parameters

src

[in] Pointer to an instance of the CArrayDouble class - source of elements to add.

Return Value

true - successful, false - cannot add items.

Note

Adding elements from array to array is actually copying the pointers. Therefore, when calling the method, there is a pitfall - there may be a pointer to a dynamic object in more than one variable.

//--- example
extern bool       make_error;
extern int        error;
extern CArrayObj *src;
//--- create a new instance CArrayObj
//--- default memory management is turned on
CArrayObj *array=new CArrayObj;
//--- add (copy) the elements from the source array 
if(array!=NULL)
   bool result=array.AddArray(src);
if(make_error)
  {
   //--- perform erroneous actions 
   switch(error)
     {
      case 0:
         //--- remove the source array without checking its memory management flag 
         delete src;
         //--- result:
         //--- it is possible to address an element by invalid pointer in the receiver array
         break;
      case 1:
         //--- disable the mechanism of memory management in the source array
         if(src.FreeMode()) src.FreeMode(false);
         //--- but do not remove the source array
         //--- result:
         //--- after removing the receiver array, it is possible to address an element by invalid pointer in the source array
         break;
      case 2:
         //--- disable the mechanism of memory management in the source array
         src.FreeMode(false);
         //--- disable the mechanism of memory management in the receiver array 
         array.FreeMode(false);
         //--- result:
         //--- after the program termination, get a "memory leak"
         break;
     }
  }
else
  {
   //--- disable the mechanism of memory management in the source array
   if(src.FreeMode()) src.FreeMode(false);
   //--- delete the source array
   delete src;
   //--- result:
   //--- addressing the receiver array element will be correct
   //--- deleting the receiver array will lead to deleting its elements
  }
 

Example:

//--- example for CArrayObj::AddArray(const CArrayObj*)
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   CArrayObj *array=new CArrayObj;
   //---
   if(array==NULL)
     {
      printf("Object create error");
      return;
     }
   //--- create source array
   CArrayObj *src=new CArrayObj;
   if(src==NULL)
     {
      printf("Object create error");
      delete array;
      return;
     }
   //--- reset free mode flag
   src.FreeMode(false);
   //--- fill source array
   //--- . . .
   //--- add another array
   if(!array.AddArray(src))
     {
      printf("Array addition error");
      delete src;
      delete array;
      return;
     }
   //--- delete source array without elements
   delete src;
   //--- use array
   //--- . . .
   //--- delete array
   delete array;
  }


Updated: 2016.03.21
Add