english
version "1.0"
identify "xyz"
#: Copyright (c) 1991-2005 by Wayne C. Gramlich.
#, All rights reserved.
module table
#: This module implements a key-value table abstraction.
define pair[key, value] #: Key/value pair
record
key key #: Key
value value #: Value
generate allocate, erase
# This is the actual table type.
define table[key, value] #: Table of key value associations
record
set set[pair[key, value]] #: Use a {set} to implement
pair pair[key, value] #: Temporary {pair}
generate allocate, erase, identical
#: {pair} procedures:
procedure create@pair[key, value]
takes
key key
value value
returns pair[key, value]
#: This procedure will create and return a new {pair} object containing
#, {key} and {value}.
procedure equal@pair[key, value]
takes
pair1 pair[key, value]
pair2 pair[key, value]
returns logical
needs
procedure equal@key
takes key, key
returns logical
#: {equal} returns {true} if {pair1} is equal to {pair2} and returns
#, {false} otherwise.
procedure hash@pair[key, value]
takes
pair pair[key, value]
returns unsigned
needs
procedure hash@key
takes key
returns unsigned
#: {hash} returns a hash value for {pair}.
procedure print@pair[key, value]
takes
pair pair[key, value]
out_stream out_stream
returns_nothing
needs
procedure print@key
takes key, out_stream
returns_nothing
procedure print@value
takes value, out_stream
returns_nothing
#: This procedure will output {pair} to {out_stream}.
procedure read@pair[key, value]
takes
in_stream in_stream
returns pair[key, value]
needs
procedure read@key
takes in_stream
returns key
procedure read@value
takes in_stream
returns value
#: This procedure read in a {pair} object from {in_stream} and
#, return it.
procedure write@pair[key, value]
takes
pair pair[key, value]
out_stream out_stream
returns_nothing
needs
procedure write@key
takes key, out_stream
returns_nothing
procedure write@value
takes value, out_stream
returns_nothing
#: This procedure will write {pair} to {out_stream}.
#: {table} procedures:
procedure create@table[key, value]
takes
size unsigned
returns table[key, value]
#: {create} will return an empty table using {size} as a prediction
#, for the number of items likely to be entered into the returned table.
procedure xcreate@table[key, value]
takes
size unsigned
returns table[key, value]
#: {create} will return an empty table using {size} as a prediction
#, for the number of items likely to be entered into the returned table.
procedure delete@table[key, value]
takes
table table[key, value]
key key
returns logical
#: This procedure will delete {key} from {table]. {true} is returned
#, {key} is not in {table} and {false} otherwise.
procedure fetch1@table[key, value]
takes
table table[key, value]
key key
returns value
needs
procedure equal@key
takes key, key
returns logical
procedure hash@key
takes key
returns unsigned
#: This procedure will return the value associated with {key} in {table}.
#, {no_matching_key} is signaled if there is no key that matches {key}
#, in {table}.
procedure lookup@table[key, value]
takes
table table[key, value]
key key
returns value
needs
procedure equal@key
takes key, key
returns logical
procedure hash@key
takes key
returns unsigned
#: This procedure will return the value associated with {key} in {table}.
#, {no_matching_key} is signaled if there is no key that matches {key}
#, in {table}.
procedure insert@table[key, value]
takes
table table[key, value]
key key
value value
returns logical
needs
procedure equal@key
takes key, key
returns logical
procedure hash@key
takes key
returns unsigned
#: This procedure will insert {key} and {value} into {table}. If {key} is
#, already in {table}, {true} is returned and the value already associated
#, with {value} is left unchanged; otherwise {false} is returend.
procedure is_in@table[key, value]
takes
table table[key, value]
key key
returns logical
needs
procedure equal@key
takes key, key
returns logical
procedure hash@key
takes key
returns unsigned
#: This procedure will return {true} if {key} is in {table} and {false}
#, otherwise.
procedure keys_get@table[key, value]
takes
table table[key, value]
returns vector[key]
#: This procedure will return the keys from {table}.
procedure pairs_get@table[key, value]
takes
table table[key, value]
returns vector[pair[key, value]]
#: This procedure will return the keys from {table}.
procedure print@table[key, value]
takes
table table[key, value]
out_stream out_stream
returns_nothing
needs
procedure print@key
takes key, out_stream
returns_nothing
procedure print@value
takes value, out_stream
returns_nothing
#: This procedure print out the contents of {table} to {out_stream}.
procedure replace@table[key, value]
takes
table table[key, value]
key key
value value
returns logical
needs
procedure equal@key
takes key, key
returns logical
procedure hash@key
takes key
returns unsigned
#: This procedure will insert {key} and {value} into {table}. If {key} is
#, already in {table}, {false} is returned; otherwise {true} is returend.
procedure size_get@table[key, value]
takes
table table[key, value]
returns unsigned
#: This procedure will return the number of entries in {table}.
procedure store1@table[key, value]
takes
table table[key, value]
key key
value value
returns_nothing
needs
procedure equal@key
takes key, key
returns logical
procedure hash@key
takes key
returns unsigned
#: This procedure will return the value associated with {key} in {table}.
#, {no_matching_key} is signaled if there is no key that matches {key}
#, in {table}.
procedure read@table[key, value]
takes
in_stream in_stream
returns table[key, value]
needs
procedure read@key
takes in_stream
returns key
procedure read@value
takes in_stream
returns value
#: This procedure will read in a {table} object from {in_stream} and
#, return it.
procedure values_get@table[key, value]
takes
table table[key, value]
returns vector[value]
#: This procedure will return the values from {table}.
procedure write@table[key, value]
takes
table table[key, value]
out_stream out_stream
returns_nothing
needs
procedure write@key
takes key, out_stream
returns_nothing
procedure write@value
takes key, out_stream
returns_nothing
#: This procedure will write the contents of {table} to {out_stream}