home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / diverses / leda / src / basic / _int_set.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-15  |  2.1 KB  |  111 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  2.1.1                                                 11-15-1991
  4. +
  5. +
  6. +  _int_set.c
  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. #include <LEDA/int_set.h>
  16.  
  17. int_set::int_set(int n)
  18. { size = n; 
  19.   low = 0;
  20.   register int i = 1+size/8;
  21.   if ((V=new char[i]) == 0) error_handler(1,"int_set: out of memory"); 
  22.   while (i--) V[i]=0;
  23.  } 
  24.  
  25. int_set::int_set(int a, int b)
  26. { size = b-a+1; 
  27.   low = a;
  28.   register int i = 1+size/8;
  29.   if ((V=new char[i]) == 0) error_handler(1,"int_set: out of memory"); 
  30.   while (i--) V[i]=0;
  31.  
  32.   mask[0] = 1;
  33.   for(i=1;i<8;i++) mask[i] = (mask[i-1] << 1);
  34.  
  35.  } 
  36.  
  37. int_set::int_set(const int_set& b)
  38. { size = b.size;
  39.   low  = b.low;
  40.   register int n = 1+size/8;
  41.   V = new char[n];
  42.   while (n--) V[n] = b.V[n];
  43. }
  44.  
  45. int_set& int_set::operator=(const int_set& b)
  46. { if (this == &b) return *this;
  47.   delete V;
  48.   size = b.size;
  49.   low  = b.low;
  50.   register int n = 1+size/8;
  51.   V = new char[n];
  52.   while (n--) V[n] = b.V[n];
  53.   return *this;
  54. }
  55.  
  56. void int_set::clear()
  57. { register int i = 1+size/8;
  58.   while (i--) V[i]=0;
  59.  }
  60.   
  61.  
  62. int  int_set::member(int x)  const
  63. { int i = x-low; 
  64.   return (V[i/8] & mask[i%8]); 
  65.  }
  66.  
  67. void int_set::insert(int x) 
  68. { int i  =  x-low; 
  69.   V[i/8] |= mask[i%8]; 
  70.  }
  71.  
  72. void int_set::del(int x)    
  73. { int i   = x-low; 
  74.   V[i/8] &= ~mask[i%8]; 
  75.  }
  76.  
  77. int_set& int_set::join(const int_set& b) 
  78. { register int n = 1+size/8;
  79.   while (n--) V[n] |= b.V[n]; 
  80.   return *this;
  81.  }
  82.  
  83. int_set& int_set::intersect(const int_set& b) 
  84. { register int n = 1+size/8;
  85.   while (n--) V[n] &= b.V[n]; 
  86.   return *this;
  87.  }
  88.  
  89. int_set& int_set::complement() 
  90. { register int n = 1+size/8;
  91.   while (n--) V[n] = ~V[n]; 
  92.   return *this;
  93.  }
  94.  
  95. int_set  int_set::operator|(const int_set& b) 
  96. { int_set res(*this); 
  97.   return res.join(b); 
  98.  }
  99.  
  100. int_set  int_set::operator&(const int_set& b) 
  101. { int_set res(*this); 
  102.   return res.intersect(b); 
  103.  }
  104.  
  105. int_set  int_set::operator~()   
  106. { int_set res(*this); 
  107.   return res.complement(); 
  108.  }
  109.  
  110.