diff options
Diffstat (limited to 'engines/sci/engine/int_hashmap.h')
-rw-r--r-- | engines/sci/engine/int_hashmap.h | 86 |
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 */ |