home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / dev / AmigaE / ArisModules / 2dArray / 2dArray.e < prev    next >
Text File  |  1995-06-24  |  2KB  |  77 lines

  1. OPT MODULE
  2.  
  3. EXPORT SET CHARS,INTS,LONGS
  4.  
  5. EXPORT OBJECT dd_array
  6.         sizeX,sizeY
  7.         PRIVATE
  8.         elType,elements
  9.         ENDOBJECT
  10.  
  11. DEF chars:PTR TO CHAR,
  12.     ints:PTR TO INT,
  13.     longs:PTR TO LONG
  14.  
  15. PROC create(x,y,elType) OF dd_array
  16.     IF (elType <> CHARS) AND
  17.        (elType <> INTS)  AND
  18.        (elType <> LONGS) THEN Throw("2d",-1)
  19.     self.elements:=NewR(x*y*elType)
  20.     self.sizeX:=(x-1)
  21.     self.sizeY:=(y-1)
  22.     self.elType:=elType
  23.     ENDPROC
  24.  
  25. PROC checkBounds (x,y) OF dd_array
  26.     IF ((x<0) OR (x>self.sizeX)) THEN Throw("2d",-2)
  27.     IF ((y<0) OR (y>self.sizeY)) THEN Throw("2d",-3)
  28.     ENDPROC
  29.  
  30. PROC offset(x,y) OF dd_array IS ((x*(self.sizeY+1)+y)*self.elType)
  31.  
  32. PROC set (x,y,value) OF dd_array
  33.     DEF type
  34.     type:=self.elType
  35.     self.checkBounds(x,y)
  36.     SELECT type
  37.         CASE CHARS
  38.             chars:=self.elements
  39.             chars[self.offset(x,y)]:=value
  40.             self.elements:=chars
  41.         CASE INTS
  42.             ints:=self.elements
  43.             ints[self.offset(x,y)]:=value
  44.             self.elements:=ints
  45.         CASE LONGS
  46.             longs:=self.elements
  47.             longs[self.offset(x,y)]:=value
  48.             self.elements:=longs
  49.         ENDSELECT
  50.     ENDPROC
  51.  
  52. PROC get (x,y) OF dd_array
  53.     DEF type,value
  54.     type:=self.elType
  55.     self.checkBounds(x,y)
  56.     SELECT type
  57.         CASE CHARS
  58.             chars:=self.elements
  59.             value:=chars[self.offset(x,y)]
  60.         CASE INTS
  61.             ints:=self.elements
  62.             value:=ints[self.offset(x,y)]
  63.         CASE LONGS
  64.             longs:=self.elements
  65.             value:=longs[self.offset(x,y)]
  66.         ENDSELECT
  67.     ENDPROC value
  68.  
  69. PROC size() OF dd_array IS self.sizeX,self.sizeY
  70.  
  71. PROC type() OF dd_array IS self.elType
  72.  
  73. PROC end() OF dd_array
  74.     IF self.elements THEN Dispose(self.elements)
  75.     ENDPROC
  76.  
  77.