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

  1. OPT MODULE
  2.  
  3. MODULE '*dBMapX'
  4. MODULE '*xli'
  5.  
  6. EXPORT OBJECT dBMapYX OF xli
  7. ENDOBJECT
  8.  
  9. PROC private_Methods_From_Here() OF dBMapYX IS EMPTY
  10.  
  11. PROC dBMapYX() OF dBMapYX IS NIL
  12.  
  13. PROC set(y, x) OF dBMapYX
  14.    DEF xm:PTR TO dBMapX
  15.    xm := self.find(y)
  16.    IF xm = NIL
  17.       NEW xm.dBMapX()
  18.       self.ordInsert(xm)
  19.    ENDIF
  20.    xm.set(x)
  21. ENDPROC
  22.  
  23. PROC clr(y, x) OF dBMapYX
  24.    DEF xm:PTR TO dBMapX
  25.    xm := self.find(y)
  26.    IF xm = NIL THEN RETURN NIL
  27.    xm.clr(x)
  28.    IF xm.count() = NIL
  29.       END xm
  30.       self.remove(xm)
  31.    ENDIF
  32. ENDPROC
  33.  
  34. PROC get(y, x) OF dBMapYX
  35.    DEF xm:PTR TO dBMapX
  36.    xm := self.find(y)
  37.    IF xm = NIL THEN RETURN NIL
  38. ENDPROC xm.get(x)
  39.  
  40. PROC count() OF dBMapYX
  41.    DEF xm:PTR TO dBMapX
  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 dBMapYX
  51.    DEF xm:PTR TO dBMapX
  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 dBMapYX
  61.    DEF xm:PTR TO dBMapX
  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 dBMapYX IS self.getMaxID()
  71.  
  72. PROC getMinY() OF dBMapYX IS self.getMinID()
  73.  
  74. PROC clear() OF dBMapYX
  75.    DEF xm:PTR TO dBMapX
  76.    DEF next
  77.    xm := self.first()
  78.    WHILE xm
  79.       next := xm.next
  80.       self.remove(xm)
  81.       END xm
  82.       xm := next
  83.    ENDWHILE
  84. ENDPROC
  85.  
  86. PROC getDBMapX(y) OF dBMapYX IS self.find(y)
  87.  
  88. PROC cmp(dbmyx:PTR TO dBMapYX) OF dBMapYX
  89.    DEF xm:PTR TO dBMapX
  90.    DEF xm2:PTR TO dBMapX
  91.    xm := self.first()
  92.    xm2 := dbmyx.first()
  93.    WHILE (xm AND xm2)
  94.       IF xm.id <> xm2.id THEN RETURN FALSE
  95.       IF xm.cmp(xm2) = FALSE THEN RETURN FALSE
  96.       xm := xm.next
  97.       xm2 := xm2.next
  98.    ENDWHILE
  99. ENDPROC TRUE
  100.  
  101. PROC or(dbmyx:PTR TO dBMapYX) OF dBMapYX
  102.    DEF thisnode:PTR TO dBMapX
  103.    DEF thatnode:PTR TO dBMapX
  104.    DEF newnode:PTR TO dBMapX
  105.    thisnode := self.first()
  106.    thatnode := dbmyx.first()
  107.    WHILE thatnode
  108.       IF thisnode.id < thatnode.id
  109.          thisnode := thisnode.next
  110.       ELSEIF thisnode = thatnode
  111.          thisnode.or(thatnode)
  112.          thisnode := thisnode.next
  113.          thatnode := thatnode.next
  114.       ELSE
  115.          NEW newnode.dBMapX()
  116.          newnode.id := thatnode.id
  117.          self.ordInsert(newnode)
  118.          thatnode := thatnode.next
  119.       ENDIF
  120.    ENDWHILE
  121. ENDPROC
  122.  
  123. PROC xor(dbmyx:PTR TO dBMapYX) OF dBMapYX
  124.    DEF thisnode:PTR TO dBMapX
  125.    DEF thatnode:PTR TO dBMapX
  126.    DEF newnode:PTR TO dBMapX
  127.    thisnode := self.first()
  128.    thatnode := dbmyx.first()
  129.    WHILE thatnode
  130.       IF thisnode.id < thatnode.id
  131.          thisnode := thisnode.next
  132.       ELSEIF thisnode = thatnode
  133.          thisnode.xor(thatnode)
  134.          thisnode := thisnode.next
  135.          thatnode := thatnode.next
  136.       ELSE
  137.          NEW newnode.dBMapX()
  138.          newnode.id := thatnode.id
  139.          self.ordInsert(newnode)
  140.          thatnode := thatnode.next
  141.       ENDIF
  142.    ENDWHILE
  143. ENDPROC
  144.  
  145. PROC and(dbmyx:PTR TO dBMapYX) OF dBMapYX
  146.    DEF thisnode:PTR TO dBMapX
  147.    DEF thatnode:PTR TO dBMapX
  148.    thisnode := self.first()
  149.    thatnode := dbmyx.first()
  150.    WHILE thisnode
  151.       IF thisnode.id < thatnode.id
  152.          thisnode := thisnode.next
  153.       ELSEIF thisnode = thatnode
  154.          thisnode.and(thatnode)
  155.          thisnode := thisnode.next
  156.          thatnode := thatnode.next
  157.       ELSE
  158.          thatnode := thatnode.next
  159.       ENDIF
  160.    ENDWHILE
  161. ENDPROC
  162.  
  163. PROC cloneContentsTo(yx:PTR TO dBMapYX) OF dBMapYX
  164.    DEF thisnode:PTR TO dBMapX
  165.    DEF thatnode:PTR TO dBMapX
  166.    yx.clear()
  167.    thisnode := self.first()
  168.    WHILE thisnode
  169.       NEW thatnode.dBMapX()
  170.       thisnode.cloneContentsTo(thatnode)
  171.       yx.ordInsert(thatnode)
  172.       thisnode := thisnode.next
  173.    ENDWHILE
  174. ENDPROC yx
  175.  
  176.  
  177. PROC end() OF dBMapYX IS self.clear()
  178.  
  179.  
  180.