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

  1. /*---------------------------------------------------------------------------
  2.  *
  3.  *      (c)     Westmount Technology    1994
  4.  *
  5.  *      File:        @(#)OPtrSet.hxx    1.3
  6.  *      Author:        peku
  7.  *      Description:    Ordered set of pointers
  8.  *---------------------------------------------------------------------------
  9.  SccsId = @(#)OPtrSet.hxx    1.3   11 Oct 1995 Copyright 1994 Westmount Technology */
  10.  
  11. #ifndef OPTRSET_HXX
  12. #define OPTRSET_HXX
  13.  
  14. #ifndef CLIST_HXX
  15. #include "CList.hxx"
  16. #endif
  17.  
  18. #if HAS_TEMPLATES
  19.  
  20. template<class T>
  21. class OPtrSet : private GenCList {
  22. public:
  23.     OPtrSet(unsigned s = DEFAULT_ARRAY_SIZE, int gf = +1): GenCList(s,gf) {}
  24.     OPtrSet(const OPtrSet& cpy): GenCList(cpy) {}
  25.     OPtrSet& operator= (const OPtrSet& cpy)
  26.             {this->GenCList::operator=(cpy); return *this;}
  27.     void reset() { GenCList::reset();}
  28.     void reset(unsigned s) { GenCList::reset(s);}
  29. #ifndef GNU
  30.     void cleanup();
  31. #endif
  32.     OPtrSet<T>& append(T *e)
  33.             {return (OPtrSet<T>&)GenCList::append(e);}
  34.     OPtrSet<T>& append(const OPtrSet<T>& l)    
  35.             {return (OPtrSet<T>&)GenCList::append(l);}
  36.     OPtrSet<T>& insert_at(int i, T *e)
  37.             {return (OPtrSet<T>&)GenCList::insert_at(i,e);}
  38.     OPtrSet<T>& insert_at(int i, const OPtrSet<T>& l)
  39.             {return (OPtrSet<T>&)GenCList::insert_at(i,l);}
  40.     OPtrSet<T>& remove_last()
  41.             {return (OPtrSet<T>&)GenCList::remove_last();}
  42.     OPtrSet<T>& remove_at(int i)
  43.             {return (OPtrSet<T>&)GenCList::remove_at(i);}
  44.     OPtrSet<T>& remove(int i, int j)    
  45.             {return (OPtrSet<T>&)GenCList::remove(i,j);}
  46.     OPtrSet<T>& remove(T *elem)    
  47.             {return (OPtrSet<T>&)GenCList::remove(elem);}
  48.     unsigned capacity() const    {return GenCList::capacity();}
  49.     unsigned size() const        {return GenCList::size();}
  50.     T*& at(int i) const        {return (T*&)GenCList::at(i);}
  51.     T*& operator[](int i) const    {return (T*&)GenCList::operator[](i);}
  52.     void operator&= (T *elem)    {append(elem);}
  53.     void operator&= (const OPtrSet<T>& lst)    {append(lst);}
  54. };
  55.  
  56. #ifndef GNU
  57. template<class T> void
  58. OPtrSet<T>::cleanup()
  59. {
  60.     T** last=&at(size());
  61.     for (register T** e=&at(0); e<last; e++) delete *e;
  62.     reset();
  63. }
  64. #endif
  65.  
  66. #else
  67.  
  68. #define OPtrSet(t) name2(t,_OPtrSet)
  69.  
  70. #define OPtrSetdeclare(t)                        \
  71. class OPtrSet(t) : private GenCList {                    \
  72. public:                                    \
  73.     OPtrSet(t) (unsigned s = DEFAULT_ARRAY_SIZE, int gf = +1):        \
  74.                             GenCList(s,gf) {}    \
  75.     OPtrSet(t) (const OPtrSet(t)& cpy): GenCList(cpy) {}        \
  76.     OPtrSet(t)& operator= (const OPtrSet(t)& cpy)            \
  77.             {this->GenCList::operator=(cpy); return *this;}    \
  78.     void reset()            { GenCList::reset();}        \
  79.     void reset(unsigned s)    { GenCList::reset(s);}            \
  80. #ifndef GNU
  81.     void cleanup();                            \
  82. #endif
  83.     OPtrSet(t)& append(t *e)                        \
  84.             {return (OPtrSet(t)&)GenCList::append(e);}        \
  85.     OPtrSet(t)& append(const OPtrSet(t)& l)                \
  86.             {return (OPtrSet(t)&)GenCList::append(l);}        \
  87.     OPtrSet(t)& insert_at(int i, t *e)                    \
  88.             {return (OPtrSet(t)&)GenCList::insert_at(i,e);}    \
  89.     OPtrSet(t)& insert_at(int i, const OPtrSet(t)& l)            \
  90.             {return (OPtrSet(t)&)GenCList::insert_at(i,l);}    \
  91.     OPtrSet(t)& remove_last()                        \
  92.             {return (OPtrSet(t)&)GenCList::remove_last();}    \
  93.     OPtrSet(t)& remove_at(int i)                    \
  94.             {return (OPtrSet(t)&)GenCList::remove_at(i);}    \
  95.     OPtrSet(t)& remove(int i, int j)                    \
  96.             {return (OPtrSet(t)&)GenCList::remove(i,j);}    \
  97.     OPtrSet(t)& remove(t *elem)                        \
  98.             {return (OPtrSet(t)&)GenCList::remove(elem);}    \
  99.     unsigned capacity() const    {return GenCList::capacity();}        \
  100.     unsigned size() const        {return GenCList::size();}    \
  101.     t*& at(int i) const        {return (t*&)GenCList::at(i);}        \
  102.     t*& operator[](int i) const    {return (t*&)GenCList::operator[](i);}    \
  103.     void operator&= (t *elem)    {append(elem);}                \
  104.     void operator&= (const OPtrSet(t)& lst)    {append(lst);}        \
  105. }
  106.  
  107. #ifndef GNU
  108. #define OPtrSetimplement(t)                        \
  109. void OPtrSet(t)::cleanup()                        \
  110. {                                    \
  111.     t** last=&at(size());                        \
  112.     for (register t** e=&at(0); e<last; e++) delete *e;            \
  113.     reset();                                \
  114. }
  115. #endif
  116.  
  117. #endif /* HAS_TEMPLATES */
  118.  
  119. #endif /* OPTRSET_HXX */
  120.