home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
dev
/
AmigaE
/
ArisModules
/
2dArray
/
2dArray.e
< prev
next >
Wrap
Text File
|
1995-06-24
|
2KB
|
77 lines
OPT MODULE
EXPORT SET CHARS,INTS,LONGS
EXPORT OBJECT dd_array
sizeX,sizeY
PRIVATE
elType,elements
ENDOBJECT
DEF chars:PTR TO CHAR,
ints:PTR TO INT,
longs:PTR TO LONG
PROC create(x,y,elType) OF dd_array
IF (elType <> CHARS) AND
(elType <> INTS) AND
(elType <> LONGS) THEN Throw("2d",-1)
self.elements:=NewR(x*y*elType)
self.sizeX:=(x-1)
self.sizeY:=(y-1)
self.elType:=elType
ENDPROC
PROC checkBounds (x,y) OF dd_array
IF ((x<0) OR (x>self.sizeX)) THEN Throw("2d",-2)
IF ((y<0) OR (y>self.sizeY)) THEN Throw("2d",-3)
ENDPROC
PROC offset(x,y) OF dd_array IS ((x*(self.sizeY+1)+y)*self.elType)
PROC set (x,y,value) OF dd_array
DEF type
type:=self.elType
self.checkBounds(x,y)
SELECT type
CASE CHARS
chars:=self.elements
chars[self.offset(x,y)]:=value
self.elements:=chars
CASE INTS
ints:=self.elements
ints[self.offset(x,y)]:=value
self.elements:=ints
CASE LONGS
longs:=self.elements
longs[self.offset(x,y)]:=value
self.elements:=longs
ENDSELECT
ENDPROC
PROC get (x,y) OF dd_array
DEF type,value
type:=self.elType
self.checkBounds(x,y)
SELECT type
CASE CHARS
chars:=self.elements
value:=chars[self.offset(x,y)]
CASE INTS
ints:=self.elements
value:=ints[self.offset(x,y)]
CASE LONGS
longs:=self.elements
value:=longs[self.offset(x,y)]
ENDSELECT
ENDPROC value
PROC size() OF dd_array IS self.sizeX,self.sizeY
PROC type() OF dd_array IS self.elType
PROC end() OF dd_array
IF self.elements THEN Dispose(self.elements)
ENDPROC