home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / RefDict.4gl < prev    next >
Text File  |  1996-07-02  |  4KB  |  182 lines

  1. -----------------------------------------------------------------------------
  2. --
  3. -- Copyright (c) 1994 by Westmount Technology B.V., Delft, The Netherlands.
  4. --
  5. -- This software is furnished under a license and may be used only in
  6. -- accordance with the terms of such license and with the inclusion of
  7. -- the above copyright notice. This software or any other copies thereof
  8. -- may not be provided or otherwise made available to any other person.
  9. -- No title to and ownership of the software is hereby transferred.
  10. --
  11. -- The information in this software is subject to change without notice
  12. -- and should not be construed as a commitment by Westmount Technology B.V.
  13. --
  14. -----------------------------------------------------------------------------
  15. --
  16. --    File        : @(#)RefDict.4gl    1.1
  17. --    Author        :
  18. --    Original date    : 19-10-1994
  19. --    Description    : A simple RefDict (map of key-value pairs)
  20. --              Both key and value are ixObject references
  21. --
  22. -----------------------------------------------------------------------------
  23.  
  24. INCLUDE "RefDict.4gh"
  25.  
  26. FUNCTION DictSlot::DictSlot(aKey ixObject, aValue ixObject)
  27.     LET key = aKey
  28.     LET value = aValue
  29. END FUNCTION
  30.  
  31. FUNCTION DictSlot::isEqualTo(other ixObject) RETURNING BOOLEAN
  32.     VARIABLE otherSlot DictSlot
  33.  
  34.     IF other IS NULL THEN
  35.         RETURN FALSE
  36.     END IF
  37.     LET otherSlot = other CAST DictSlot
  38.     IF otherSlot IS NULL THEN
  39.         RETURN FALSE
  40.     END IF
  41.  
  42.     RETURN key.isEqualTo(otherSlot.getKey())
  43. END FUNCTION
  44.  
  45. FUNCTION DictSlot::getKey() RETURNING ixObject
  46.     RETURN key
  47. END FUNCTION
  48.  
  49. FUNCTION DictSlot::getValue() RETURNING ixObject
  50.     RETURN value
  51. END FUNCTION
  52.  
  53. FUNCTION DictSlot::setValue(newValue ixObject) RETURNING VOID
  54.     LET value = newValue
  55. END FUNCTION
  56.  
  57.  
  58. FUNCTION RefDict::RefDict()
  59.     LET s = NEW ORefSet()
  60. END FUNCTION
  61.  
  62. FUNCTION RefDict::find(key ixObject) RETURNING DictSlot
  63.     VARIABLE i INTEGER
  64.     VARIABLE slot DictSlot
  65.     VARIABLE obj ixObject
  66.  
  67.     FOR i = 1 TO s.getCount()
  68.         LET obj = s.get(i)
  69.         IF obj IS NOT NULL THEN
  70.             LET slot = obj CAST DictSlot
  71.             IF key.isEqualTo(slot.getKey()) THEN
  72.                 RETURN slot
  73.             END IF
  74.         END IF
  75.     END FOR
  76.  
  77.     RETURN NULL
  78. END FUNCTION
  79.  
  80. FUNCTION RefDict::set(key ixObject, value ixObject) RETURNING VOID
  81.     VARIABLE slot DictSlot = find(key)
  82.     VARIABLE retVal INTEGER
  83.  
  84.     IF slot IS NOT NULL THEN
  85.         -- slot already exists
  86.         CALL slot.setValue(value)
  87.         RETURN
  88.     END IF
  89.  
  90.     -- add a new slot
  91.     LET retVal = s.append(NEW DictSlot(key, value))
  92. END FUNCTION
  93.  
  94. FUNCTION RefDict::get(key ixObject) RETURNING ixObject
  95.     VARIABLE slot DictSlot = find(key)
  96.  
  97.     IF slot IS NOT NULL THEN
  98.         RETURN slot.getValue()
  99.     END IF
  100.  
  101.     RETURN NULL
  102. END FUNCTION
  103.  
  104. FUNCTION RefDict::remove(key ixObject) RETURNING VOID
  105.     VARIABLE retVal INTEGER
  106.     VARIABLE slot DictSlot = find(key)
  107.  
  108.     IF slot IS NOT NULL THEN
  109.         CALL s.remove(slot)
  110.     END IF
  111. END FUNCTION
  112.  
  113. FUNCTION RefDict::isPresent(key ixObject) RETURNING BOOLEAN
  114.     VARIABLE slot DictSlot = find(key)
  115.  
  116.     IF slot IS NULL THEN
  117.         RETURN FALSE
  118.     END IF
  119.  
  120.     RETURN TRUE
  121. END FUNCTION
  122.  
  123. FUNCTION RefDict::size() RETURNING INTEGER
  124.     RETURN s.size()
  125. END FUNCTION
  126.  
  127. FUNCTION RefDict::firstKey() RETURNING ixObject
  128.     VARIABLE obj ixObject = s.first()
  129.     VARIABLE slot DictSlot
  130.  
  131.     IF obj IS NOT NULL THEN
  132.         LET slot = obj CAST DictSlot
  133.         IF slot IS NOT NULL THEN
  134.             RETURN slot.getKey()
  135.         END IF
  136.     END IF
  137.  
  138.     RETURN NULL
  139. END FUNCTION
  140.  
  141. FUNCTION RefDict::nextKey() RETURNING ixObject
  142.     VARIABLE obj ixObject = s.next()
  143.     VARIABLE slot DictSlot
  144.  
  145.     IF obj IS NOT NULL THEN
  146.         LET slot = obj CAST DictSlot
  147.         IF slot IS NOT NULL THEN
  148.             RETURN slot.getKey()
  149.         END IF
  150.     END IF
  151.  
  152.     RETURN NULL
  153. END FUNCTION
  154.  
  155. FUNCTION RefDict::firstValue() RETURNING ixObject
  156.     VARIABLE obj ixObject = s.first()
  157.     VARIABLE slot DictSlot
  158.  
  159.     IF obj IS NOT NULL THEN
  160.         LET slot = obj CAST DictSlot
  161.         IF slot IS NOT NULL THEN
  162.             RETURN slot.getValue()
  163.         END IF
  164.     END IF
  165.  
  166.     RETURN NULL
  167. END FUNCTION
  168.  
  169. FUNCTION RefDict::nextValue() RETURNING ixObject
  170.     VARIABLE obj ixObject = s.next()
  171.     VARIABLE slot DictSlot
  172.  
  173.     IF obj IS NOT NULL THEN
  174.         LET slot = obj CAST DictSlot
  175.         IF slot IS NOT NULL THEN
  176.             RETURN slot.getValue()
  177.         END IF
  178.     END IF
  179.  
  180.     RETURN NULL
  181. END FUNCTION
  182.