REBOL [
Title: "Associate"
Date: 3-Jul-2002/20:40
Name: Associate
Version: 1.0.0
File: %Associate.r
Author: "Andrew Martin"
Purpose: "Provides an associative memory store."
Email: Al.Bri@xtra.co.nz
Web: http://valley.150m.com
Category: [db util 4]
]
Associate?: function [
Association [series! port! bitset! none!]
Key [any-type!]
] [
Associated
] [
if not none? Association [
if found? Associated: select/skip Association :Key 2 [
first Associated
]
]
]
Associate: function [
Association [series! port! bitset!]
Key [any-type!]
Value [any-type!]
] [
Associated
] [
either found? Associated: find/skip Association :Key 2 [
either none? :Value [
remove/part Associated 2
] [
change/only next Associated :Value
]
] [
if not none? :Value [
repend Association [Key Value]
]
]
Association
]
Associate-Many: function [
Association [series! port! bitset!]
Key [any-type!]
Value [any-type!]
] [
Associated
] [
if none? :Value [
return associate Association :Key :Value
]
either found? Associated: associate? Association :Key [
append/only Associated :Value
] [
associate Association :Key reduce [:Value]
]
Association
]
Keys: func [Association [series! port! bitset!]][
extract Association 2
]