Patch title: Release 85 bulk changes
Abstract:
File: /pliant/language/type/set/dictionary.pli
Key:
    Removed line
    Added line
   
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


    method d first k -> v
      arg Dictionary d ; arg Key k ; arg_C Value v
      if d:hashsize<>0
        var Int i := hash_key:k%(cast d:hashsize uInt)
        var Pointer:DictionaryNode n :> (d:table translate A
        d walk k n v
      else
        # v :> null map Value
        (addressof Pointer:Value v) map Address := null
      
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


    method d first k -> v
      arg Dictionary d ; arg Key k ; arg_C Value v
      if d:hashsize<>0
        var Int i := hash_key:k%(cast d:hashsize uInt)
        var Pointer:DictionaryNode n :> (d:table translate A
        d walk k n v
      else
        # v :> null map Value
        (addressof Pointer:Value v) map Address := null
      
    method d first k default -> v
      arg_rw Dictionary d ; arg Key k ; arg Value default ; arg_C Value v
      v :> d first k
      if not exists:v
        v :> default   

    method d next k v1 -> v2
      arg Dictionary d ; arg Key k ; arg_r Value v1 ; arg_C 
      var Pointer:DictionaryNode n :> ((addressof:v1 transla
      d walk k n:next_node v2


    method d next k v1 -> v2
      arg Dictionary d ; arg Key k ; arg_r Value v1 ; arg_C 
      var Pointer:DictionaryNode n :> ((addressof:v1 transla
      d walk k n:next_node v2


    method d '' k default -> v
      arg_rw Dictionary d ; arg Key k ; arg Value default ; arg_C Value v
      v :> d first k
      if not exists:v
        v :> d insert k default        

    function '-=' d v
      arg_rw Dictionary d ; arg_r Value v
      if d:hashsize=0
        return
      var Pointer:DictionaryNode n :> ((addressof:v translat
      var Int i := (hash_key n:key)%(cast d:hashsize uInt)
      var (Pointer Pointer:DictionaryNode) ptr :>> (d:table 
      while addressof:ptr<>addressof:n
        ptr :>> ptr next_node
      ptr :> n next_node
    function '-=' d v
      arg_rw Dictionary d ; arg_r Value v
      if d:hashsize=0
        return
      var Pointer:DictionaryNode n :> ((addressof:v translat
      var Int i := (hash_key n:key)%(cast d:hashsize uInt)
      var (Pointer Pointer:DictionaryNode) ptr :>> (d:table 
      while addressof:ptr<>addressof:n
        ptr :>> ptr next_node
      ptr :> n next_node
     DictionaryNode destroy_instance addressof:n
     memory_free addressof:n
     d count := d:count-1
      DictionaryNode destroy_instance addressof:n
      memory_free addressof:n
      d count := d:count-1
  
    method d remove v -> v2
      arg_rw Dictionary d ; arg_r Value v ; arg_C Value v2
      # v2 :> d next v
      (addressof Pointer:Value v2) map Address := addressof 
      d -= v


export Dictionary
  
    method d remove v -> v2
      arg_rw Dictionary d ; arg_r Value v ; arg_C Value v2
      # v2 :> d next v
      (addressof Pointer:Value v2) map Address := addressof 
      d -= v


export Dictionary