ArrayInsert

Inserta en la matriz-receptor el número indicado de elementos, comenzando por el índice establecido.

bool  ArrayInsert(
   void&        dst_array[],          // matriz-receptor
   const void&  src_array[],          // matriz-fuente
   uint         dst_start,            // índice de la matriz-receptor para la inserción
   uint         src_start=0,          // índice en la matriz-fuente para el copiado
   uint         count=WHOLE_ARRAY     // número de elementos a insertar
   );

Parámetros

dst_array[]

[in][out]  Matriz-receptor a la que se deben añadir los elementos.

src_array[]

[in]  Matriz-fuenete desde la que se deben añadir los elementos.

dst_start

[in]  Índice en la matriz-receptor para la inserción de los elementos de la matriz-fuente.

src_start=0

[in]  Índice de la matriz-fuente, a partir del cual se toman los elementos de la matriz-fuente para la inserción.

count=WHOLE_ARRAY

[in]  Número de elementos a añadir desde la matriz-fuente. El valor WHOLE_ARRAY indica que se insertarán todos los elementos desde el índice establecido hasta el final de la matriz.

Valor retornado

Retorna true en caso de éxito, de lo contrario, false. Para obtener información sobre el error, es necesario llamar la función GetLastError(). Posibles errores:

  • 5052 — ERR_SMALL_ARRAY (los parámetros start y/o count se han indicado incorrectamente o la matriz-fuente src_array[] está vacía),
  • 5056 — ERR_SERIES_ARRAY (la matriz no puede modificarse, búfer de indicador),
  • 4006 — ERR_INVALID_ARRAY (el copiado en sí no está permitido, o bien las matrices tienen tipo distinto, o bien una matriz de tamaño fijo que contiene objetos de clase o estructuras con destructores),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (la matriz no contiene estructuras POD, es decir, el copiado simple no es posible),
  • errores de cambio de tamaño de la matriz-receptor dst_array[] — estos se muestran en la descripción de la función ArrayRemove().

 

Observación

Si la función se usa para una matriz de tamaño fijo, el propio tamaño de la matriz-receptor dst_array[] no cambia, en este caso, además, comenzando desde la posición dst_start, los elementos de la matriz-receptor se desplazan a la derecha (los últimos elementos count "se caen"), y en el lugar liberado tiene lugar el copiado de elementos de la matriz-fuente.

No se puede insertar elementos en matrices dinámicas designadas como búferes de indicador con la función SetIndexBuffer(). Para los búferes de indicador, todas las operaciones de cambio de tamaño son realizadas por el subsistema ejecutor del terminal.

En la matriz-fuente se copian los elementos, comenzando por el índice src_start. El tamaño de la matriz-fuente, en este caso, no cambia. Los elementos añadidos a la matriz-receptor no son enlaces a los elementos de la matriz-fuente, esto significa que los posteriores cambios de los elementos en cualquiera de las dos matrices no se reflejarán en la segunda.

Ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos una matriz de tamaño fijo y rellenamos con valores
   int array_dest[10];
   for(int i=0;i<10;i++)
     {
      array_dest[i]=i;
     }
   //--- matriz-fuente   
   int array_source[10];
   for(int i=0;i<10;i++)
     {
      array_source[i]=10+i;
     }
//--- mostramos las matrices antes de la inserción de los elementos
   Print("Antes de llamar ArrayInsert()");
   ArrayPrint(array_dest);
   ArrayPrint(array_source);
//--- insertamos 3 elementos de la matriz-fuente y mostramos la nueva composición de la matriz-receptor
   ArrayInsert(array_dest,array_source,4,0,3);
   Print("Después de llamar ArrayInsert()");
   ArrayPrint(array_dest);
/*
  Resultado de la ejecución
   Antes de llamar ArrayInsert()
   0 1 2 3 4 5 6 7 8 9
   Después de llamar ArrayInsert()
   0 1 2 3 10 11 12 7 8 9
*/

Mire también

ArrayRemove, ArrayCopy, ArrayResize, ArrayFree