home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / libg++-2.7.1-bin.lha / lib / g++-include / gen / SplayBag.hP < prev    next >
Text File  |  1996-10-12  |  3KB  |  127 lines

  1. // This may look like C code, but it is really -*- C++ -*-
  2. /* 
  3. Copyright (C) 1988, 1982 Free Software Foundation
  4.     written by Doug Lea (dl@rocky.oswego.edu)
  5.  
  6. This file is part of the GNU C++ Library.  This library is free
  7. software; you can redistribute it and/or modify it under the terms of
  8. the GNU Library General Public License as published by the Free
  9. Software Foundation; either version 2 of the License, or (at your
  10. option) any later version.  This library is distributed in the hope
  11. that it will be useful, but WITHOUT ANY WARRANTY; without even the
  12. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  13. PURPOSE.  See the GNU Library General Public License for more details.
  14. You should have received a copy of the GNU Library General Public
  15. License along with this library; if not, write to the Free Software
  16. Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. */
  18.  
  19. #ifndef _<T>SplayBag_h
  20. #ifdef __GNUG__
  21. #pragma interface
  22. #endif
  23. #define _<T>SplayBag_h 1
  24.  
  25. #include "<T>.Bag.h"
  26. #include "<T>.SplayNode.h"
  27.  
  28. class <T>SplayBag : public <T>Bag
  29. {
  30. protected:
  31.   <T>SplayNode*   root;
  32.  
  33.   <T>SplayNode*   leftmost();
  34.   <T>SplayNode*   rightmost();
  35.   <T>SplayNode*   pred(<T>SplayNode* t);
  36.   <T>SplayNode*   succ(<T>SplayNode* t);
  37.   void            _kill(<T>SplayNode* t);
  38.   <T>SplayNode*   _copy(<T>SplayNode* t);
  39.   void            _del(<T>SplayNode* t);
  40.  
  41. public:
  42.                   <T>SplayBag();
  43.                   <T>SplayBag(<T>SplayBag& a);
  44.   inline                 ~<T>SplayBag();
  45.  
  46.   Pix           add(<T&> item);
  47.   inline void          del(<T&> item);
  48.   void          remove(<T&>item);
  49.   int           nof(<T&> item);
  50.   inline int           contains(<T&> item);
  51.  
  52.   inline void          clear();
  53.  
  54.   inline Pix           first();
  55.   inline void          next(Pix& i);
  56.   inline <T>&          operator () (Pix i);
  57.   Pix           seek(<T&> item, Pix from = 0);
  58.  
  59.   Pix           last();
  60.   void          prev(Pix& i);
  61.  
  62.   int           OK();
  63. };
  64.  
  65.  
  66. inline <T>SplayBag::~<T>SplayBag()
  67. {
  68.   _kill(root);
  69. }
  70.  
  71. inline <T>SplayBag::<T>SplayBag()
  72. {
  73.   root = 0;
  74.   count = 0;
  75. }
  76.  
  77. inline <T>SplayBag::<T>SplayBag(<T>SplayBag& b)
  78. {
  79.   count = b.count;
  80.   root = _copy(b.root);
  81. }
  82.  
  83. inline Pix <T>SplayBag::first()
  84. {
  85.   return Pix(leftmost());
  86. }
  87.  
  88. inline Pix <T>SplayBag::last()
  89. {
  90.   return Pix(rightmost());
  91. }
  92.  
  93. inline void <T>SplayBag::next(Pix& i)
  94. {
  95.   if (i != 0) i = Pix(succ((<T>SplayNode*)i));
  96. }
  97.  
  98. inline void <T>SplayBag::prev(Pix& i)
  99. {
  100.   if (i != 0) i = Pix(pred((<T>SplayNode*)i));
  101. }
  102.  
  103. inline <T>& <T>SplayBag::operator () (Pix i)
  104. {
  105.   if (i == 0) error("null Pix");
  106.   return ((<T>SplayNode*)i)->item;
  107. }
  108.  
  109. inline void <T>SplayBag::clear()
  110. {
  111.   _kill(root);
  112.   count = 0;
  113.   root = 0;
  114. }
  115.  
  116. inline int <T>SplayBag::contains(<T&> key)
  117. {
  118.   return seek(key) != 0;
  119. }
  120.  
  121. inline void <T>SplayBag::del(<T&> key)
  122. {
  123.   _del((<T>SplayNode*)(seek(key)));
  124. }
  125.  
  126. #endif
  127.