home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / dictelement.sru < prev    next >
Text File  |  1997-04-03  |  3KB  |  158 lines

  1. $PBExportHeader$dictelement.sru
  2. $PBExportComments$An element in a classdict 
  3. forward
  4. global type dictelement from nonvisualobject
  5. end type
  6. end forward
  7.  
  8. global type dictelement from nonvisualobject
  9. end type
  10. global dictelement dictelement
  11.  
  12. type variables
  13. private powerobject contents
  14. private any ckey
  15. private dictelement nextElement, prevElement
  16. end variables
  17.  
  18. forward prototypes
  19. public function boolean contains (any key)
  20. public function powerobject get (any key)
  21. public subroutine set (any key, powerobject obj)
  22. public subroutine remove (any key)
  23. public function powerobject objectbyindex(integer index)
  24. public function any keybyindex(integer index)
  25. private function dictelement elementbyindex(integer index)
  26. end prototypes
  27.  
  28. public function boolean contains (any key);//
  29. if isNull(key) then
  30.     return false
  31. end if
  32. if not isNull(ckey) then
  33.     if key = ckey then 
  34.         return true
  35.     end if
  36. end if
  37. if isNull(nextElement) then
  38.     return false
  39. end if
  40. return nextElement.contains(key)
  41. end function
  42.  
  43. public function powerobject get (any key);//
  44. powerobject nullobject
  45. setNull(nullobject)
  46.  
  47. if isNull(key) then
  48.     return nullobject
  49. end if
  50. if not isNull(ckey) then
  51.     if key = ckey then
  52.         return contents
  53.     end if
  54. end if
  55. if isNull(nextElement) then
  56.     return nullobject
  57. end if
  58. return nextElement.get(key)
  59. end function
  60.  
  61. public subroutine set (any key, powerobject obj);// insert key/obj just after this
  62. if isNull(key) then
  63.     return
  64. end if
  65. if not isNull(ckey) then
  66.     if key = ckey then
  67.         contents = obj
  68.         return
  69.     end if
  70. end if
  71. if isNull(nextElement) then
  72.     dictelement element
  73.  
  74.     element = create dictelement
  75.     element.ckey = key
  76.     element.contents = obj
  77.     element.prevElement = this
  78.     element.nextElement = nextElement
  79.  
  80.     nextElement = element
  81.     return
  82. end if
  83. nextElement.set(key, obj)
  84. end subroutine
  85.  
  86. public subroutine remove (any key);//
  87. if isNull(key) then
  88.     return
  89. end if
  90. if isNull(nextElement) then
  91.     return
  92. end if
  93. if key = nextElement.ckey then
  94.     dictelement element
  95.     // remove nextElement from list and destroy it
  96.     element = nextElement
  97.     nextElement = element.nextElement
  98.     if not isNull(nextElement) then 
  99.         nextElement.prevElement = this
  100.     end if
  101.     destroy element
  102.     return
  103. end if
  104. nextElement.remove(key)
  105. end subroutine
  106.  
  107. public function any keybyindex (integer index);//
  108. dictelement element
  109. element = elementbyindex(index)
  110.  
  111. if isNull(element) then
  112.     any nullany
  113.     setNull(nullany)
  114.     return nullany
  115. end if
  116. return element.ckey
  117. end function
  118.  
  119. public function powerobject objectbyindex (integer index);//
  120. dictelement element
  121. element = elementbyindex(index)
  122.  
  123. if isNull(element) then
  124.     powerobject nullobject
  125.     setNull(nullobject)
  126.     return nullobject
  127. end if
  128. return element.contents
  129. end function
  130.  
  131. private function dictelement elementbyindex (integer index);//
  132. if isNull(nextElement) then
  133.     dictelement nullelement
  134.     setNull(nullelement)
  135.     return nullelement
  136. end if
  137. if index = 0 then
  138.     return nextElement
  139. end if
  140. return nextElement.elementbyindex(index - 1)
  141. end function
  142.  
  143. on dictelement.create
  144. TriggerEvent( this, "constructor" )
  145. end on
  146.  
  147. on dictelement.destroy
  148. TriggerEvent( this, "destructor" )
  149. end on
  150.  
  151. event constructor;//
  152. setNull(contents)
  153. setNull(ckey)
  154. setNull(nextElement)
  155. setNull(prevElement)
  156. end event
  157.  
  158.