StringReserve

Reserva en la memoria para la cadena un búfer del tamaño indicado.

bool  StringReserve(
   string&    string_var,       // cadena
   uint       new_capacity      // tamaño del búfer para guardar la cadena
   );

Parámetros

string_var

[in][out]  Cadena para la que se debe cambiar el tamaño del búfer.

new_capacity

[in]  Tamaño necesario del búfer para la cadena. Si el nuevo tamaño de new_capacity es menor que la longitud de la cadena, el tamaño del búfer actual no cambia.

Valor retornado

Si se ejecuta con éxito, retornará true, de lo contrario, false. Para obtener el código del error, hay que llamar la función GetLastError().

Observación

En general, el tamaño de la cadena no es igual al del búfer designado para el guardado de la cadena. Normalmente, al crear la cadena, el búfer para la misma se designa con margen. La función StringReserve() permite gestionar el tamaño del búfer e indicar el tamaño óptimo para futuras operaciones.

A diferencia de StringInit(), la función StringReserve() no cambia el contenido de la cadena y no la rellena con símbolos.

Ejemplo:

void OnStart()
  {
   string s;
//--- comprobamos la velocidad de funcionamiento sin uso de StringReserve
   ulong t0=GetMicrosecondCount();
   for(int i=0; i< 1024; i++)
      s+=" "+(string)i;
   ulong msc_no_reserve=GetMicrosecondCount()-t0;
   s=NULL;
//--- ahora la medimos con el uso de StringReserve
   StringReserve(s,1024 * 3);
   t0=GetMicrosecondCount();
   for(int i=0; i< 1024; i++)
      s+=" "+(string)i;
   ulong msc_reserve=GetMicrosecondCount()-t0;
//--- comprobamos el tiempo
   Print("Test with StringReserve passed for "+(string)msc_reserve+" msc");   
   Print("Test without StringReserve passed for "+(string)msc_no_reserve+" msc");         
/* Resultado:
     Test with StringReserve passed for 50 msc
     Test without StringReserve passed for 121 msc
*/
  }

Mire también

StringBufferLen, StringSetLength, StringInit, StringSetCharacter