home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / c / cuj9301.zip / 1101098A < prev    next >
Text File  |  1992-11-03  |  2KB  |  111 lines

  1. // fa5.cpp - a dynamic array of float using a
  2. // subscripting object
  3.  
  4. #include "fa5.h"
  5. #include <assert.h>
  6.  
  7. fa_index::fa_index(float_array *f, size_t i)
  8.     : fa(f), ix(i) { }
  9.  
  10. fa_index &fa_index::operator=(float f)
  11.     {
  12.     if (ix >= fa->len)
  13.         fa->extend(ix);
  14.     fa->array[ix] = f;
  15.     return *this;
  16.     }
  17.  
  18. fa_index::operator float()
  19.     {
  20.     if (ix >= fa->len)
  21.         fa->extend(ix);
  22.     return fa->array[ix];
  23.     }
  24.  
  25. fa_index float_array::operator[](size_t i)
  26.     {
  27.     return fa_index(this, i);
  28.     }
  29.  
  30. float float_array::operator[](size_t i) const
  31.     {
  32.     assert(i < len);
  33.     return array[i];
  34.     }
  35.  
  36. ffloat_array::float_array(size_t n)
  37.     {
  38.     if ((len = n) == 0)
  39.         array = 0;
  40.     else
  41.         {
  42.         array = new float[n];
  43.         assert(array != 0);
  44.         for (int i = 0; i < n; ++i)
  45.             array[i] = 0;
  46.         }
  47.     }
  48.  
  49. float_array::float_array(const float_array &fa)
  50.     {
  51.     if ((len = fa.len) == 0)
  52.         array = 0;
  53.     else
  54.         {
  55.         array = new float[len];
  56.         assert(array != 0);
  57.         for (int i = 0; i < len; ++i)
  58.             array[i] = fa.array[i];
  59.         }
  60.     }
  61.  
  62. float_array::~float_array()
  63.     {
  64.     delete [] array;
  65.     }
  66.  
  67. float_array &float_array::operator=(const float_array &fa)
  68.     {
  69.     if (this != &fa)
  70.         return *this;
  71.     if (len != fa.len)
  72.         {
  73.         delete [] array;
  74.         if ((len = fa.len) == 0)
  75.             array = 0;
  76.         else
  77.             {
  78.             array = new float[len];
  79.             assert(array != 0);
  80.             }
  81.         }
  82.     for (size_t i = 0; i < len; ++i)
  83.         array[i] = fa.array[i];
  84.     return *this;
  85.     }
  86.  
  87. ostream &operator<<(ostream &os, const float_array &fa)
  88.     {
  89.     os << '{';
  90.     size_t i;
  91.     for (i = 0; i < fa.length(); ++i)
  92.         os << ' ' << fa[i];
  93.     return os << " }";
  94.     }
  95.  
  96. void float_array::extend(size_t i)
  97.     {
  98.     float *new_array = new float[i + 1];
  99.     assert(new_array != 0);
  100.     size_t j;
  101.     for (j = 0; j < len; ++j)
  102.         new_array[j] = array[j];
  103.     for (; j < i + 1; ++j)
  104.         new_array[i] = 0;
  105.     delete [] array;
  106.     array = new_array;
  107.     len = i + 1;
  108.     }
  109.  
  110.  
  111.