home *** CD-ROM | disk | FTP | other *** search
- OPT MODULE -> Define class 'set' in a module
- OPT EXPORT -> Export everything
-
- /* The data for the class */
- OBJECT set PRIVATE -> Make all the data private
- elements:PTR TO LONG
- maxsize, size
- ENDOBJECT
-
- /* Creation constructor */
- /* Minimum size of 1, maximum 100000, default 100 */
- PROC create(sz=100) OF set
- DEF p:PTR TO LONG
- IF (sz>0) AND (sz<100000) -> Check size
- self.maxsize:=sz
- ELSE
- self.maxsize:=100
- ENDIF
- self.elements:=NEW p[self.maxsize]
- ENDPROC
-
- /* Copy constructor */
- PROC copy(oldset:PTR TO set) OF set
- DEF i
- self.create(oldset.maxsize) -> Call create method!
- FOR i:=0 TO oldset.size-1 -> Copy elements
- self.elements[i]:=oldset.elements[i]
- ENDFOR
- self.size:=oldset.size
- ENDPROC
-
- /* Destructor */
- PROC end() OF set
- DEF p:PTR TO LONG
- IF self.maxsize<>0 -> Check that it was allocated
- p:=self.elements
- END p[self.maxsize]
- ENDIF
- ENDPROC
-
- /* Add an element */
- PROC add(x) OF set
- IF self.member(x)=FALSE -> Is it new? (Call member method!)
- IF self.size=self.maxsize
- Raise("full") -> The set is already full
- ELSE
- self.elements[self.size]:=x
- self.size:=self.size+1
- ENDIF
- ENDIF
- ENDPROC
-
- /* Test for membership */
- PROC member(x) OF set
- DEF i
- FOR i:=0 TO self.size-1
- IF self.elements[i]=x THEN RETURN TRUE
- ENDFOR
- ENDPROC FALSE
-
- /* Test for emptiness */
- PROC empty() OF set IS self.size=0
-
- /* Union (add) another set */
- PROC union(other:PTR TO set) OF set
- DEF i
- FOR i:=0 TO other.size-1
- self.add(other.elements[i]) -> Call add method!
- ENDFOR
- ENDPROC
-
- /* Print out the contents */
- PROC print() OF set
- DEF i
- WriteF('{ ')
- FOR i:=0 TO self.size-1
- WriteF('\d ', self.elements[i])
- ENDFOR
- WriteF('}')
- ENDPROC
-