home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / amigae / e_v3.2a / src / guide / set.e < prev    next >
Text File  |  1977-12-31  |  2KB  |  81 lines

  1. OPT MODULE  -> Define class 'set' in a module
  2. OPT EXPORT  -> Export everything
  3.  
  4. /* The data for the class */
  5. OBJECT set PRIVATE  -> Make all the data private
  6.   elements:PTR TO LONG
  7.   maxsize, size
  8. ENDOBJECT
  9.  
  10. /* Creation constructor */
  11. /* Minimum size of 1, maximum 100000, default 100 */
  12. PROC create(sz=100) OF set
  13.   DEF p:PTR TO LONG
  14.   IF (sz>0) AND (sz<100000) -> Check size
  15.     self.maxsize:=sz
  16.   ELSE
  17.     self.maxsize:=100
  18.   ENDIF
  19.   self.elements:=NEW p[self.maxsize]
  20. ENDPROC
  21.  
  22. /* Copy constructor */
  23. PROC copy(oldset:PTR TO set) OF set
  24.   DEF i
  25.   self.create(oldset.maxsize)  -> Call create method!
  26.   FOR i:=0 TO oldset.size-1  -> Copy elements
  27.     self.elements[i]:=oldset.elements[i]
  28.   ENDFOR
  29.   self.size:=oldset.size
  30. ENDPROC
  31.  
  32. /* Destructor */
  33. PROC end() OF set
  34.   DEF p:PTR TO LONG
  35.   IF self.maxsize<>0  -> Check that it was allocated
  36.     p:=self.elements
  37.     END p[self.maxsize]
  38.   ENDIF
  39. ENDPROC
  40.  
  41. /* Add an element */
  42. PROC add(x) OF set
  43.   IF self.member(x)=FALSE  -> Is it new? (Call member method!)
  44.     IF self.size=self.maxsize
  45.       Raise("full")  -> The set is already full
  46.     ELSE
  47.       self.elements[self.size]:=x
  48.       self.size:=self.size+1
  49.     ENDIF
  50.   ENDIF
  51. ENDPROC
  52.  
  53. /* Test for membership */
  54. PROC member(x) OF set
  55.   DEF i
  56.   FOR i:=0 TO self.size-1
  57.     IF self.elements[i]=x THEN RETURN TRUE
  58.   ENDFOR
  59. ENDPROC FALSE
  60.  
  61. /* Test for emptiness */
  62. PROC empty() OF set IS self.size=0
  63.  
  64. /* Union (add) another set */
  65. PROC union(other:PTR TO set) OF set
  66.   DEF i
  67.   FOR i:=0 TO other.size-1
  68.     self.add(other.elements[i])  -> Call add method!
  69.   ENDFOR
  70. ENDPROC
  71.  
  72. /* Print out the contents */
  73. PROC print() OF set
  74.   DEF i
  75.   WriteF('{ ')
  76.   FOR i:=0 TO self.size-1
  77.     WriteF('\d ', self.elements[i])
  78.   ENDFOR
  79.   WriteF('}')
  80. ENDPROC
  81.