parent $misc object $db var $root child_index 2 var $root owners [$db] var $root owned [$db] var $root fertile 0 var $root inited 1 var $root manager $db var $root writable [$db] var $root readable ['parameters, 'methods, 'code] var $root dbref 'db var $db database #[] var $root info ["Nothing more than a dictionary of names and objects."] method init_db .perms(caller(), $root); database = #[]; . method database return database; . method value_changed arg key, new_value; // change the value of a key. (> .remove(key) <); (> .insert(key, new_value) <); . method remove arg key; // remove a key/value from the database //THIS: is breaking the user_db (quick comment fix :) // .perms(sender(), 'writer); database = dict_del(database, key); . method exact_match arg key; var match; // get an exact match of a key, return the value match = (| database[key] |); if (match == ~keynf) throw(~matchnf, "No object by that key exists in the database."); return match; . method match_begin arg key; var matches, entry; // use match_begin of the key, return the value matches = [(| .exact_match(key) |)]; if (!(matches[1])) { matches = []; for entry in (database) { if (match_begin(entry[1], key)) matches = [@matches, entry[2]]; } } if (matches) { if (listlen(matches) == 1) return matches[1]; else throw(~ambig, "More than one object matches that key.", matches); } else { throw(~matchnf, "No entries in the database match that key."); } . method insert arg key, value; // insert a key/value to the database // .perms(sender(), 'writer); database = dict_add(database, key, value); . method uninit_db .perms(caller(), $user); database = 0; . method key_changed arg old_key, new_key; var val; // change the value of a key. val = database[old_key]; .remove(old_key); .insert(new_key, val); .