diff options
| author | Franklin Wei <git@fwei.tk> | 2016-02-12 21:54:42 -0500 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2016-02-16 20:42:49 -0500 |
| commit | b110e7e0c519cc9575f8d224f0f75aca0d73946f (patch) | |
| tree | c3f33326a5e4822f2251e8d7370294096ab2eba4 /src/room.h | |
| parent | a006044fbcb3355f0fa063720e7c41f4971894a0 (diff) | |
| download | netcosm-b110e7e0c519cc9575f8d224f0f75aca0d73946f.zip netcosm-b110e7e0c519cc9575f8d224f0f75aca0d73946f.tar.gz netcosm-b110e7e0c519cc9575f8d224f0f75aca0d73946f.tar.bz2 netcosm-b110e7e0c519cc9575f8d224f0f75aca0d73946f.tar.xz | |
support multiple objects sharing the same name
Diffstat (limited to 'src/room.h')
| -rw-r--r-- | src/room.h | 18 |
1 files changed, 10 insertions, 8 deletions
@@ -57,7 +57,7 @@ struct room_t { room_id adjacent[NUM_DIRECTIONS]; /* hash maps */ - void *objects; /* object name -> object */ + void *objects; /* multimap of object name -> object */ void *verbs; void *users; /* username -> child_data */ }; @@ -66,22 +66,24 @@ struct room_t { bool room_user_add(room_id id, struct child_data *child); bool room_user_del(room_id id, struct child_data *child); -/* on the first call, room should be a valid room id, and *save should +/* On the first call, room should be a valid room id, and *save should * point to a void pointer. On subsequent calls, room should be * ROOM_NONE, and *save should remain unchanged from the previous - * call */ -struct object_t *room_obj_iterate(room_id room, void **save); + * call. This call returns a LINKED LIST of objects with the same + * name every time it is called, not individual objects. */ +const struct multimap_list *room_obj_iterate(room_id room, void **save, size_t *n_pairs); /* new should point to a new object allocated with obj_new(), with * 'name' properly set */ bool room_obj_add(room_id room, struct object_t *obj); -/* obj should be all lowercase */ -struct object_t *room_obj_get(room_id room, const char *obj); - -size_t room_obj_count(room_id room); +const struct multimap_list *room_obj_get(room_id room, const char *obj); +const struct multimap_list *room_obj_get_size(room_id room, const char *name, size_t *n_objs); bool room_obj_del(room_id room, const char *name); +bool room_obj_del_id(room_id room, const char *name, obj_id id); + +size_t room_obj_count(room_id room); /* local verbs override global verbs */ bool room_verb_add(room_id room, struct verb_t*); |