home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / dictelement.sru < prev    next >
Text File  |  1997-08-06  |  4KB  |  183 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. powerobject contents
  14. any ckey
  15. dictelement nextElement, prevElement
  16. end variables
  17.  
  18. forward prototypes
  19. public function powerobject get (any key)
  20. public function powerobject objectbyindex (integer index)
  21. public function any keybyindex (integer index)
  22. private function dictelement elementbyindex (integer index)
  23. public function integer contains (any key)
  24. public function integer remove (any key)
  25. public function integer set (any key, powerobject obj)
  26. end prototypes
  27.  
  28. public function powerobject get (any key);//
  29. if isNull(key) and isNull(ckey) then
  30.     return contents
  31. end if
  32. if not isNull(ckey) then
  33.     if key = ckey then
  34.         return contents
  35.     end if
  36. end if
  37. if isNull(nextElement) then
  38.     powerobject nullobject
  39.     setNull(nullobject)
  40.     return nullobject
  41. end if
  42. return nextElement.get(key)
  43. end function
  44.  
  45. public function powerobject objectbyindex (integer index);//
  46. dictelement element
  47. element = elementbyindex(index)
  48.  
  49. if isNull(element) then
  50.     powerobject nullobject
  51.     setNull(nullobject)
  52.     return nullobject
  53. end if
  54. return element.contents
  55. end function
  56.  
  57. public function any keybyindex (integer index);//
  58. dictelement element
  59. element = elementbyindex(index)
  60.  
  61. if isNull(element) then
  62.     any nullany
  63.     setNull(nullany)
  64.     return nullany
  65. end if
  66. return element.ckey
  67. end function
  68.  
  69. private function dictelement elementbyindex (integer index);//
  70. if isNull(nextElement) then
  71.     dictelement nullelement
  72.     setNull(nullelement)
  73.     return nullelement
  74. end if
  75. if index = 0 then
  76.     return nextElement
  77. end if
  78. return nextElement.elementbyindex(index - 1)
  79. end function
  80.  
  81. public function integer contains (any key);// 
  82. if isNull(key) then
  83.     return 0
  84. end if
  85. if not isNull(ckey) then
  86.     if key = ckey then 
  87.         return 1
  88.     end if
  89. end if
  90. if isNull(nextElement) then
  91.     return 0
  92. end if
  93. return nextElement.contains(key)
  94. end function
  95.  
  96. public function integer remove (any key);// checks next element and remove is applicable
  97. dictelement element
  98. if isNull(nextElement) then
  99.     return 0
  100. end if
  101. if isNull(key) and isNull(nextElement.ckey) then
  102.     // remove nextElement from list and destroy it
  103.     element = nextElement
  104.     nextElement = element.nextElement
  105.     if not isNull(nextElement) then 
  106.         nextElement.prevElement = this
  107.     end if
  108.     setNull(element.prevElement)
  109.     setNull(element.nextElement)
  110.     destroy element
  111.     return 1
  112. end if
  113.  
  114. if key = nextElement.ckey then
  115.     // remove nextElement from list and destroy it
  116.     element = nextElement
  117.     nextElement = element.nextElement
  118.     if not isNull(nextElement) then 
  119.         nextElement.prevElement = this
  120.     end if
  121.     setNull(element.prevElement)
  122.     setNull(element.nextElement)
  123.     destroy element
  124.     return 1
  125. end if
  126. return nextElement.remove(key)
  127. end function
  128.  
  129. public function integer set (any key, powerobject obj);// insert key/obj at end or at key position
  130. if isNull(key) and isNull(ckey) then
  131.     // replace
  132.     contents = obj
  133.     return 0
  134. end if
  135. if not isNull(ckey) and not isNull(key) then
  136.     if key = ckey then
  137.         // replace
  138.         contents = obj
  139.         return 0
  140.     end if
  141. end if
  142. if isNull(nextElement) then
  143.     // add
  144.     dictelement element
  145.  
  146.     element = create dictelement
  147.     element.ckey = key
  148.     element.contents = obj
  149.     element.prevElement = this
  150.     element.nextElement = nextElement
  151.  
  152.     nextElement = element
  153.     return 1
  154. end if
  155. return nextElement.set(key, obj)
  156. end function
  157.  
  158. on dictelement.create
  159. TriggerEvent( this, "constructor" )
  160. end on
  161.  
  162. on dictelement.destroy
  163. TriggerEvent( this, "destructor" )
  164. end on
  165.  
  166. event constructor;//
  167. setNull(contents)
  168. setNull(ckey)
  169. setNull(nextElement)
  170. setNull(prevElement)
  171. end event
  172.  
  173. event destructor;// destroy nextElement
  174. setNull(contents)
  175. setNull(ckey)
  176. setNull(prevElement)
  177. if not isNull(nextElement) then
  178.     destroy nextElement
  179. end if
  180. setNull(nextElement)
  181. end event
  182.  
  183.