home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 4 / AACD04.ISO / AACD / Programming / lsEstuff / dbmapZYX.e < prev    next >
Encoding:
Text File  |  1999-10-08  |  4.2 KB  |  201 lines

  1. OPT MODULE
  2.  
  3. MODULE '*dBMapYX'
  4. MODULE '*xli'
  5.  
  6. EXPORT OBJECT dBMapZYX OF xli
  7. ENDOBJECT
  8.  
  9. PROC private_Methods_From_Here() OF dBMapZYX IS EMPTY
  10.  
  11. PROC dBMapZYX() OF dBMapZYX IS NIL
  12.  
  13. PROC set(z, y, x) OF dBMapZYX
  14.    DEF xm:PTR TO dBMapYX
  15.    xm := self.find(z)
  16.    IF xm = NIL
  17.       NEW xm.dBMapYX()
  18.       self.ordInsert(xm)
  19.    ENDIF
  20.    xm.set(y, x)
  21. ENDPROC
  22.  
  23. PROC clr(z, y, x) OF dBMapZYX
  24.    DEF xm:PTR TO dBMapYX
  25.    xm := self.find(z)
  26.    IF xm = NIL THEN RETURN NIL
  27.    xm.clr(y, x)
  28.    IF xm.count() = NIL
  29.       END xm
  30.       self.remove(xm)
  31.    ENDIF
  32. ENDPROC
  33.  
  34. PROC get(z, y, x) OF dBMapZYX
  35.    DEF xm:PTR TO dBMapYX
  36.    xm := self.find(z)
  37.    IF xm = NIL THEN RETURN NIL
  38. ENDPROC xm.get(y, x)
  39.  
  40. PROC count() OF dBMapZYX
  41.    DEF xm:PTR TO dBMapYX
  42.    DEF count=NIL
  43.    xm := self.first()
  44.    WHILE xm
  45.       count := count + xm.count()
  46.       xm := xm.next
  47.    ENDWHILE
  48. ENDPROC count
  49.  
  50. PROC getMaxX() OF dBMapZYX
  51.    DEF xm:PTR TO dBMapYX
  52.    DEF mi=NIL
  53.    xm := self.first()
  54.    WHILE xm
  55.       mi := Max(mi, xm.getMaxX())
  56.       xm := xm.next
  57.    ENDWHILE
  58. ENDPROC mi
  59.  
  60. PROC getMinX() OF dBMapZYX
  61.    DEF xm:PTR TO dBMapYX
  62.    DEF mi=NIL
  63.    xm := self.first()
  64.    WHILE xm
  65.       mi := Min(mi, xm.getMinX())
  66.       xm := xm.next
  67.    ENDWHILE
  68. ENDPROC mi
  69.  
  70. PROC getMaxY() OF dBMapZYX
  71.    DEF xm:PTR TO dBMapYX
  72.    DEF mi=NIL
  73.    xm := self.first()
  74.    WHILE xm
  75.       mi := Max(mi, xm.getMaxY())
  76.       xm := xm.next
  77.    ENDWHILE
  78. ENDPROC mi
  79.  
  80. PROC getMinY() OF dBMapZYX
  81.    DEF xm:PTR TO dBMapYX
  82.    DEF mi=NIL
  83.    xm := self.first()
  84.    WHILE xm
  85.       mi := Min(mi, xm.getMinY())
  86.       xm := xm.next
  87.    ENDWHILE
  88. ENDPROC mi
  89.  
  90. PROC getMaxZ() OF dBMapZYX IS self.getMaxID()
  91.  
  92. PROC getMinZ() OF dBMapZYX IS self.getMinID()
  93.  
  94. PROC clear() OF dBMapZYX
  95.    DEF xm:PTR TO dBMapYX
  96.    DEF next
  97.    xm := self.first()
  98.    WHILE xm
  99.       next := xm.next
  100.       self.remove(xm)
  101.       END xm
  102.       xm := next
  103.    ENDWHILE
  104. ENDPROC
  105.  
  106. PROC getDBMapYX(z) OF dBMapZYX
  107. ENDPROC self.find(z)
  108.  
  109. PROC cmp(dbmzyx:PTR TO dBMapZYX) OF dBMapZYX
  110.    DEF xm:PTR TO dBMapYX
  111.    DEF xm2:PTR TO dBMapYX
  112.    xm := self.first()
  113.    xm2 := dbmzyx.first()
  114.    WHILE (xm AND xm2)
  115.       IF xm.id <> xm2.id THEN RETURN FALSE
  116.       IF xm.cmp(xm2) = FALSE THEN RETURN FALSE
  117.       xm := xm.next
  118.       xm2 := xm2.next
  119.    ENDWHILE
  120. ENDPROC TRUE
  121.  
  122. PROC or(dbmzyx:PTR TO dBMapZYX) OF dBMapZYX
  123.    DEF thisnode:PTR TO dBMapYX
  124.    DEF thatnode:PTR TO dBMapYX
  125.    DEF newnode:PTR TO dBMapYX
  126.    thisnode := self.first()
  127.    thatnode := dbmzyx.first()
  128.    WHILE thatnode
  129.       IF thisnode.id < thatnode.id
  130.          thisnode := thisnode.next
  131.       ELSEIF thisnode = thatnode
  132.          thisnode.or(thatnode)
  133.          thisnode := thisnode.next
  134.          thatnode := thatnode.next
  135.       ELSE
  136.          NEW newnode.dBMapYX()
  137.          newnode.id := thatnode.id
  138.          self.ordInsert(newnode)
  139.          thatnode := thatnode.next
  140.       ENDIF
  141.    ENDWHILE
  142. ENDPROC
  143.  
  144. PROC xor(dbmzyx:PTR TO dBMapZYX) OF dBMapZYX
  145.    DEF thisnode:PTR TO dBMapYX
  146.    DEF thatnode:PTR TO dBMapYX
  147.    DEF newnode:PTR TO dBMapYX
  148.    thisnode := self.first()
  149.    thatnode := dbmzyx.first()
  150.    WHILE thatnode
  151.       IF thisnode.id < thatnode.id
  152.          thisnode := thisnode.next
  153.       ELSEIF thisnode = thatnode
  154.          thisnode.xor(thatnode)
  155.          thisnode := thisnode.next
  156.          thatnode := thatnode.next
  157.       ELSE
  158.          NEW newnode.dBMapYX()
  159.          newnode.id := thatnode.id
  160.          self.ordInsert(newnode)
  161.          thatnode := thatnode.next
  162.       ENDIF
  163.    ENDWHILE
  164. ENDPROC
  165.  
  166. PROC and(dbmzyx:PTR TO dBMapZYX) OF dBMapZYX
  167.    DEF thisnode:PTR TO dBMapYX
  168.    DEF thatnode:PTR TO dBMapYX
  169.    thisnode := self.first()
  170.    thatnode := dbmzyx.first()
  171.    WHILE thisnode
  172.       IF thisnode.id < thatnode.id
  173.          thisnode := thisnode.next
  174.       ELSEIF thisnode = thatnode
  175.          thisnode.and(thatnode)
  176.          thisnode := thisnode.next
  177.          thatnode := thatnode.next
  178.       ELSE
  179.          thatnode := thatnode.next
  180.       ENDIF
  181.    ENDWHILE
  182. ENDPROC
  183.  
  184. PROC cloneContentsTo(zyx:PTR TO dBMapZYX) OF dBMapZYX
  185.    DEF thisnode:PTR TO dBMapYX
  186.    DEF thatnode:PTR TO dBMapYX
  187.    zyx.clear()
  188.    thisnode := self.first()
  189.    WHILE thisnode
  190.       NEW thatnode.dBMapYX()
  191.       thisnode.cloneContentsTo(thatnode)
  192.       zyx.ordInsert(thatnode)
  193.       thisnode := thisnode.next
  194.    ENDWHILE
  195. ENDPROC zyx
  196.  
  197.  
  198. PROC end() OF dBMapZYX IS self.clear()
  199.  
  200.  
  201.