home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / grafik / cgazv5n3 / dynarray.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-28  |  1.4 KB  |  44 lines

  1. /* ******* Listing 2 *************************** DYNARRAY.CPP *********
  2. *  dynarray.cpp  Copyright (C) 1990 by Tom Provenzano
  3. *  Allows an array to be dynamically resized at runtime.
  4. **********************************************************************/
  5.  
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include <stream.hpp>
  9. #include <errno.h>
  10. #include "dynarray.hpp"
  11.  
  12. int dynarray::change_size( unsigned newsize ) // change size of storage block
  13. {                                       // can be an increase or decrease
  14.   char *a;
  15.   a = (char *)realloc( array, newsize*elem_size ); // reallocate block
  16.   if ( !a )
  17.     err = errno;                               // signal realloc failure
  18.   else
  19.   {
  20.     array = a;                       // update array address
  21.     elements = newsize;                           // new element count
  22.   }
  23.   return 0;
  24. }
  25.  
  26. dynarray::dynarray( unsigned n, unsigned elemsize )
  27. {
  28.   elements = n;
  29.   elem_size = elemsize;
  30.   array = (char *)calloc( elements, elem_size );
  31.   err = ( !array ) ? errno : 0;
  32. }
  33.  
  34. char *dynarray::pick( int i )
  35. {
  36.   int j = elements;
  37.  
  38.   if (i >= j)                // requested index outside current storage
  39.      change_size(i+1);         // resize
  40.   else if ( i < 0 )        // downsizing required
  41.      return ( change_size(j+=i) ) ? NULL : array+(elements-1)*elem_size;
  42.   return array+i*elem_size;    // pointer to appropriate element
  43. }