home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / FlexArray.hxx < prev    next >
Text File  |  1996-05-31  |  2KB  |  81 lines

  1. /*---------------------------------------------------------------------------
  2.  *
  3.  *    (c)    Westmount Technology    1990
  4.  *
  5.  *    File        : @(#)FlexArray.hxx    1.3
  6.  *    Description    : Generic relocatable arrays
  7.  *
  8.  *---------------------------------------------------------------------------
  9.  */
  10.  
  11. #ifndef FLEXARRAY_HXX
  12. #define FLEXARRAY_HXX
  13.  
  14. #ifndef TEMPLCONF_HXX
  15. #include "TemplConf.hxx"
  16. #endif
  17.  
  18. #if !HAS_TEMPLATES
  19. #ifndef GENERICH
  20. #   include <generic.h>
  21. #endif
  22. #endif  /* HAS_TEMPLATES */
  23.  
  24. extern const int DEFAULT_ARRAY_SIZE;        // == 16
  25.  
  26. class GenFlexArray {
  27. public:
  28.     GenFlexArray    (unsigned size = DEFAULT_ARRAY_SIZE);
  29.  
  30.     GenFlexArray    (const GenFlexArray&);
  31.    ~GenFlexArray    ();
  32.     GenFlexArray&    operator=(const GenFlexArray&);
  33.  
  34.     void    clear(void* e= 0);
  35.     void    reSize(unsigned);
  36.     unsigned    capacity() const    { return sz; }
  37.  
  38.     void*&    at(int i) const        { return v[i]; }
  39.     void*&    operator[](int i) const
  40.         { return v[i]; }
  41.  
  42. protected:
  43.     void**        v;
  44.     unsigned        sz;
  45. };
  46.  
  47. #if HAS_TEMPLATES
  48.  
  49. template<class T>
  50. class FlexArray : private GenFlexArray {
  51. public:
  52.     FlexArray(unsigned s=DEFAULT_ARRAY_SIZE): GenFlexArray(s) {}
  53.     void    clear(T e =0)        { GenFlexArray::clear(e); }
  54.     unsigned    capacity() const    { return sz; }
  55.     void    reSize(unsigned s)    { GenFlexArray::reSize(s); }
  56.     T&        at(int i) const        { return (T&)v[i]; }
  57.     T&        operator[](int i) const
  58.              { return (T&)GenFlexArray::operator[](i); }
  59. };
  60.  
  61.  
  62. #else
  63.  
  64. #define FlexArray(t) name2(t,_FlexArray)
  65.  
  66. #define FlexArraydeclare(t)                        \
  67. class FlexArray(t) : private GenFlexArray {                \
  68. public:                                    \
  69.     FlexArray(t) (unsigned s=DEFAULT_ARRAY_SIZE): GenFlexArray(s) {}    \
  70.     void    clear(t e =0)        { GenFlexArray::clear(e); }    \
  71.     unsigned    capacity() const    { return sz; }            \
  72.     void    reSize(unsigned s)    { GenFlexArray::reSize(s); }    \
  73.     t&        at(int i) const        { return (t&)v[i]; }        \
  74.     t&        operator[](int i) const                    \
  75.              { return (t&)GenFlexArray::operator[](i); }    \
  76. }
  77.  
  78. #endif  /* HAS_TEMPLATES */
  79.  
  80. #endif /* FLEXARRAY_HXX */
  81.