home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / grafik / cgazv5n3 / dynarray.hpp < prev    next >
Encoding:
Text File  |  1991-03-02  |  1.7 KB  |  44 lines

  1. /********* Listing 1 *************************** DYNARRAY.HPP ********
  2. *  dynarray.hpp  Copyright (C) 1990 by Tom Provenzano
  3. *  Header file for a dynamic array class allowing the size of 
  4. *  an array to be increased or decreased at runtime.
  5. **********************************************************************
  6.  
  7. #ifndef DYNARRAYHPP
  8. #define DYNARRAYHPP
  9.  
  10. #include <stdlib.h>
  11. #include <generic.hpp>
  12.  
  13. #define gdynarray(type) name2(type,gdynarray)
  14. #define gdynarraydeclare(type)                          \
  15. struct gdynarray(type) : dynarray                       \
  16. {                                                       \
  17.   gdynarray(type)(unsigned n=1) : (n,sizeof(type)) {}   \
  18.   type& operator[] (int i)                              \
  19.     { return *((type *) pick(i)); }                     \
  20.   type *operator&(void)                                 \
  21.     { return (type *) address(); }                      \
  22. };
  23.  
  24. class dynarray
  25. {
  26.   private:
  27.     unsigned elements;      // number of elements in array
  28.     unsigned elem_size;     // number bytes in an array element
  29.     char *array;            // address of array buffer
  30.     int err;                // class error flag
  31.     int change_size( unsigned );// change array size
  32.   public:
  33.     dynarray( unsigned n = 1, unsigned elemsize = 1 );
  34.     ~dynarray( void )        { free( array ); }
  35.     int error( void )        { int x = err; err = 0; return x; }
  36.     char *pick( int );
  37.     char *address( void )    { return array; }
  38.     unsigned size( void )    { return elements; }
  39.     int& operator[]( int i ) { return *(int *) pick( i ); }
  40.     int  *operator&( void )  { return  (int *) array; }
  41. };
  42. #endif