aboutsummaryrefslogtreecommitdiff
path: root/src/room.h
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-02-12 21:54:42 -0500
committerFranklin Wei <git@fwei.tk>2016-02-16 20:42:49 -0500
commitb110e7e0c519cc9575f8d224f0f75aca0d73946f (patch)
treec3f33326a5e4822f2251e8d7370294096ab2eba4 /src/room.h
parenta006044fbcb3355f0fa063720e7c41f4971894a0 (diff)
downloadnetcosm-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.h18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/room.h b/src/room.h
index 64cfeae..7ed720e 100644
--- a/src/room.h
+++ b/src/room.h
@@ -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*);