aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/int_hashmap.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/int_hashmap.h')
-rw-r--r--engines/sci/engine/int_hashmap.h86
1 files changed, 32 insertions, 54 deletions
diff --git a/engines/sci/engine/int_hashmap.h b/engines/sci/engine/int_hashmap.h
index d87ba78c88..bc522d5de8 100644
--- a/engines/sci/engine/int_hashmap.h
+++ b/engines/sci/engine/int_hashmap.h
@@ -44,67 +44,45 @@
#define DCS_INT_HASH_MAX 255
-struct int_hash_map_node_t {
- int name;
- int value;
- int_hash_map_node_t *next;
-};
-
-
struct int_hash_map_t {
+ struct node_t {
+ int name;
+ int value;
+ node_t *next;
+ };
+
int base_value; /* Starts at zero, counts upwards */
- int_hash_map_node_t *nodes[DCS_INT_HASH_MAX+1];
- int_hash_map_node_t *holes; /* List of freed entries to minimize
+ node_t *nodes[DCS_INT_HASH_MAX+1];
+ node_t *holes; /* List of freed entries to minimize
** memory operations and modifications
** to base_value */
-};
-typedef int_hash_map_t *int_hash_map_ptr;
+ void free_node_recursive(node_t *node);
+
+public:
+ int_hash_map_t();
+ ~int_hash_map_t();
+
+ /**
+ * Checks whether a value is in the map, adds it if neccessary.
+ * @param value The value to check for/add
+ * @param add Whether to add the value if it's not in there
+ * @param was_added Set to non-zero iff the value is new, ignored if NULL.
+ * @return The new (or old) index, or -1 if add was zero and
+ * the value couldn't be found
+ */
+ int check_value(int value, bool add, char *was_added = 0);
+
+ /**
+ * Removes a value from the hash map.
+ * @param value The value to remove
+ * @return The ID of the value, or -1 if it wasn't present
+ */
+ int remove_value(int value);
+};
-int_hash_map_t *
-new_int_hash_map(void);
-/* Creates a new hash map for the specified int
-** Parameters: (void)
-** Returns : (int_hash_map_t *) The newly allocated hash map
-*/
-
-void
-free_int_hash_map(int_hash_map_ptr map);
-/* Frees the specified hash map
-** Parameters: (int_hash_map_t *) map: The map to free
-** Returns : (void)
-*/
-
-void
-apply_to_int_hash_map(int_hash_map_ptr map, void *param, void (*note)(void *param, int name, int value));
-/* Iterates over all entries in the hash map and invokes 'note'
-** Parameters: (int_hash_map_t *) map: The map to iterate over
-** (void *) param: Some parameter to pass to 'note'
-** ((voidptr * int * value) -> void) note: The callback to invoke for each entry
-*/
-
-int
-int_hash_map_check_value(int_hash_map_ptr map, int value, char add, char *was_added);
-/* Checks whether a value is in the map, adds it if neccessary
-** Parameters: (int_hash_map_t *) map: The map to look in/modify
-** (int) value: The value to check for/add
-** (char) add: Whether to add the value if it's not in there
-** (char *) was_added: Set to non-zero iff the value is new
-** Ignored if NULL.
-** Returns : (int) The new (or old) index, or -1 if add was zero and
-** the value couldn't be found
-** If MUST_FREE is defined and add is set but the value was already in
-** there, the value is freed.
-*/
-
-int
-int_hash_map_remove_value(int_hash_map_ptr map, int value);
-/* Removes a value from the hash map
-** Parameters: (int_hash_map_t *) map: The map to remove from
-** (int) value: The value to remove
-** Returns : (int) The ID of the value, or -1 if it wasn't presen
-*/
+typedef int_hash_map_t *int_hash_map_ptr;
#endif /* INT_HASHMAP_H */