[REBOL] Associative data storage function library
From: joel::neely::fedex::com at: 22-Sep-2000 17:22
This is a multi-part message in MIME format.
--------------EFFDA6170AF07702FFAE4693
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=us-ascii
As a follow-up to the previous post, I also put together a function
library equivalent to the OO version. (I know this is reinventing
the wheel, but I wanted total equivalence for reasons that will be
made clear in the following post.)
-jn-
--------------EFFDA6170AF07702FFAE4693
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=us-ascii;
name="assocf.r"
Content-Disposition: inline;
filename="assocf.r"
REBOL [
Title: "Minimal Associative Data Store - Function Version"
File: %assocf.r
Date: 20-Sep-2000
Author: "Joel Neely"
Purpose: {
Function-based implementation of associative data store,
using object for data only, with arbitrary data types
for keys and values.
}
]
assoc.object: make object! [
_keys: copy []
_vals: copy []
]
assoc.clear: func [ads [object!]] [
ads/_keys: copy []
ads/_vals: copy []
ads
]
assoc.empty?: func [ads [object!]] [system/words/empty? ads/_keys]
assoc.length?: func [ads [object!]] [system/words/length? ads/_keys]
assoc.new: func [/local r] [r: make assoc.object [] assoc.clear r]
assoc.put: func [ads [object!] k [any-type!] v [any-type!] /local p] [
either found? p: find/only ads/_keys k [
change/only at ads/_vals index? p v
][
append/only ads/_keys k
append/only ads/_vals v
]
v
]
assoc.get: func [ads [object!] k [any-type!] /local p] [
either none? p: find/only ads/_keys k [
none
][
pick ads/_vals index? p
]
]
assoc.delete: func [ads [object!] k [any-type!] /local p v] [
either none? p: find/only ads/_keys k [
none
][
k: pick ads/_vals p: index? p
remove at ads/_keys p
remove at ads/_vals p
k
]
]
assoc.keys: func [ads [object!]] [copy ads/_keys]
--------------EFFDA6170AF07702FFAE4693--