home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / diverses / leda / incl / set.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-15  |  2.0 KB  |  69 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  2.1.1                                                 11-15-1991
  4. +
  5. +
  6. +  set.h
  7. +
  8. +
  9. +  Copyright (c) 1991  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15.  
  16.  
  17. #ifndef SETH
  18. #define SETH
  19.  
  20. //------------------------------------------------------------------------------
  21. // set             
  22. //
  23. // Stefan Naeher  (1989)
  24. //------------------------------------------------------------------------------
  25.  
  26. #include <LEDA/basic.h>
  27.  
  28. #ifndef RBTREEH 
  29. #include <LEDA/rb_tree.h>
  30. #endif
  31.  
  32. #define set(keytype) name2(keytype,set)
  33.  
  34. #define setdeclare(keytype)\
  35. \
  36. class set(keytype) : public rb_tree {\
  37. \
  38. rb_tree_node* iterator;\
  39. \
  40. int  cmp(ent& x, ent& y) const { return compare(*(keytype*)&x,*(keytype*)&y); }\
  41. void clear_key(ent& x)   const { Clear(*(keytype*)&x); }\
  42. void copy_key(ent& x)    const { Copy(*(keytype*)&x); }\
  43. \
  44. public:\
  45. void insert(keytype y)         { rb_tree::insert(Ent(y),0); }\
  46. void del(keytype y)            { rb_tree::del(Ent(y)); }\
  47. bool member(keytype y)   const { return (rb_tree::lookup(Ent(y))!=nil); }\
  48. keytype choose()         const { return keytype(rb_tree::key(rb_tree::min())); }\
  49. \
  50. void init_iterator()          { iterator = rb_tree::first_item(); }\
  51. bool next_element(keytype& y) { if (iterator==0) return false;\
  52.                                 else { void* p = rb_tree::key(iterator);\
  53.                                        y = *(keytype*)&p;\
  54.                                        iterator=rb_tree::next_item(iterator);\
  55.                                        return true; } \
  56.                                }\
  57. \
  58.  set(keytype)& operator=(const set(keytype)& S)\
  59.  { rb_tree::operator=((rb_tree&) S); return *this; }\
  60. \
  61.  set(keytype)() {}\
  62.  set(keytype)(const set(keytype)& S) : rb_tree((rb_tree&) S) {}\
  63. ~set(keytype)() { clear(); }\
  64. } ;
  65.  
  66. #endif
  67.  
  68.